ГОСТ 22558-89
(СТ СЭВ 6184-88,
ИСО 1989-85)
Группа П85
ГОСУДАРСТВЕННЫЙ СТАНДАРТ СОЮЗА ССР
ЯЗЫК ПРОГРАММИРОВАНИЯ КОБОЛ
Programming language COBOL
ЧАСТИ 8-17
ОКСТУ 4002
Дата введения 1991-01-01
ИНФОРМАЦИОННЫЕ ДАННЫЕ
1. РАЗРАБОТАН И ВНЕСЕН Академией наук УССР
РАЗРАБОТЧИКИ
Е.Л.Ющенко, член-корр. АН УССР (руководитель темы); Л.П.Бабенко, канд. физ.-мат. наук; Г.А.Карпенко; Н.К.Лищитович; Л.А.Мельник; М.Р.Тарановский; Г.В.Пеледов; А.С.Марков; А.А.Севастюк; Л.М.Романовская; Л.К.Загузова
2. УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Постановлением Государственного комитета СССР по стандартам от 20.12.89 N 3894
3. Срок первой проверки 1996 г.; периодичность проверки - 5 лет.
4. Стандарт полностью соответствует СТ СЭВ 6184-88
5. Стандарт полностью соответствует международному стандарту ИСО 1989-85
6. ВЗАМЕН ГОСТ 22558-77
7. ССЫЛОЧНЫЕ НОРМАТИВНО-ТЕХНИЧЕСКИЕ ДОКУМЕНТЫ
Обозначение НТД, на который дана ссылка | Номер приложения |
ГОСТ 22558-77* | Приложение 1 |
______________
* На территории Российской Федерации документ не действует. Действует ГОСТ 22558-89 (настоящий стандарт), здесь и далее по тексту. - .
(3) Результаты выполнения оператора WRITE (ПИСАТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентны выполнению следующих операторов в указанном порядке:
а) оператор MOVE идентификатор-1 ТО имя-записи-1
(ПОМЕСТИТЬ идентификатор-1 В имя-записи-1) соответственно правилам, специфицированным в операторе MOVE (ПОМЕСТИТЬ);
б) тот же оператор WRITE (ПИСАТЬ) без фразы FROM (ИЗ ПОЛЯ).
(5) Выполнение оператора WRITE (ПИСАТЬ) не влияет на указатель позиции файла.
(6) Выполнение оператора WRITE (ПИСАТЬ) вызывает обновление состояния ввода-вывода имени-файла, связанного с именем-записи-1 (см. п.1.3.5 настоящей части).
(7) При выполнении оператора WRITE (ПИСАТЬ) логическая запись передается операционной системе.
(8) Количество позиций литер в записи, указанной именем-записи-1, не должно быть больше наибольшего или меньше наименьшего числа-литер, допустимого фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО), связанной с именем-файла, связанного с именем-записи-1. В любом случае выполнение оператора WRITE (ПИСАТЬ) неуспешно, операция записи не происходит, содержимое области записи не меняется, и состояние ввода-вывода файла, связанного с именем-записи-1, принимает значение, указывающее на причину условия (см. п.1.3.5 настоящей части). (9) Если во время выполнения оператора WRITE (ПИСАТЬ) с фразой NOT END-OF-PAGE (НЕ В КОНЦЕ СТРАНИЦЫ) не наступает условие конца страницы, то управление передается повелительному-оператору-2 следующим образом: а) если выполнение оператора WRITE (ПИСАТЬ) успешно, то управление передается после того, как запись записана, и после изменения состояния ввода-вывода имени-файла, связанного с именем-записи-1; б) если выполнение оператора WRITE (ПИСАТЬ) закончилось неуспешно, то управление передается после изменения состояния ввода-вывода имени-файла, связанного с именем-записи-1, и после выполнения какой-либо процедуры, специфицированной оператором USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), применимым к имени-файла, связанного с именем-записи-1. (10) Фраза END-WRITE (КОНЕЦ-ПИСАТЬ) ограничивает область действия оператора WRITE (ПИСАТЬ) (см. ч.4, п.6.4.3). |
(12) Когда последовательный файл открыт как EXTEND (ДОПОЛНЯЕМЫЙ), то в результате выполнения оператора WRITE (ПИСАТЬ) записи будут добавляться в конец файла так, как если бы файл был открыт как OUTPUT (ВЫХОДНОЙ). Если в файле есть записи, то первая запись, записанная после выполнения оператора OPEN (ОТКРЫТЬ) с фразой EXTEND (ДОПОЛНЯЕМЫЙ), является следующей после последней записи в файле. |
(13) Когда делается попытка записать запись за внешне определенными границами последовательного файла, то возникает условие ошибки и содержимое области записи остается неизменным. Происходят следующие действия:
а) значение состояния ввода-вывода для имени-файла, связанного с именем-записи-1, устанавливается в значение, указывающее на нарушение границ;
б) если для имени-файла, связанного с именем-записи-1, явно или неявно специфицирована декларатива USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), то будет выполняться эта декларативная процедура;
в) если декларатива USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ) не специфицирована явно или неявно для имени файла, связанного с именем-записи-1, то результат будет неопределенным.
(14) Если распознается конец катушки/тома и внешне определенные границы файла не превышены, то выполняются следующие операции:
а) стандартная процедура конечных меток катушки/тома;
б) смена катушки/тома. Указатель текущего тома изменяется для указания на следующую катушку/том, существующую для файла;
в) стандартная процедура начальных меток катушки/тома.
(15) Фразы ADVANCING (ПРОДВИЖЕНИЯ)
а) если целое-1 или данное, указанное идентификатором-2, положительно, то печатаемая страница продвигается на число строк, равное этому значению;
б) если значение данного, указанного идентификатором-2, отрицательно, то результаты будут неопределенными;
в) если целое-1 или значение данного, указанного идентификатором-2, равно нулю, то перемещение печатаемой страницы не происходит;
г) если указано мнемоническое-имя-1, печатаемая страница продвигается в соответствии с правилами, установленными peaлизацией для данного устройства; |
д) если используется фраза BEFORE (ДО), строка выводится до продвижения печатаемой страницы в соответствии с приведенными выше правилами;
е) если используется фраза AFTER (ПОСЛЕ), строка выводится после продвижения печатаемой страницы в соответствии с приведенными выше правилами;
ж) если во фразе ADVANCING (ПРОДВИЖЕНИЯ) указано слово PAGE (СТРАНИЦЫ) и в статье описания файла, связанного с выводимой записью, указана фраза LINAGE (ВЕРСТКА), то запись выводится до или после (в зависимости от используемой фразы) позиционирования устройства на следующую логическую страницу. Позиционирование устройства производится на первую строку, которая может быть записана на следующей логической странице в соответствии со спецификацией фразы LINAGE (ВЕРСТКА); |
(16) Если во время выполнения оператора WRITE (ПИСАТЬ) с фразой END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) достигается логический конец печатаемой страницы, выполняется повелительный-оператор-1, указанный во фразе END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ). Логический конец специфицируется фразой LINAGE (ВЕРСТКА), связанной с именем-записи. (17) Условие конца страницы возникает всякий раз, когда выполнение оператора WRITE (ПИСАТЬ) с фразой END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) вызывает печать или протяжку в области концовки тела страницы. Это происходит тогда, когда при выполнении оператора WRITE (ПИСАТЬ) LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) становится равным или большим, чем значение целого-2 или данного, представленного именем-данного-2 во фразе LINAGE (ВЕРСТКА), если они указаны. В этом случае выполняется оператор WRITE (ПИСАТЬ), а затем повелительный-оператор-1, указанный во фразе END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ). Всякий раз, когда выполнение оператора WRITE (ПИСАТЬ) (с фразой END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) или без нее) не может быть удовлетворено полностью в границах тела текущей страницы, возникает условие переполнения страницы. Это происходит тогда, когда оператор WRITE (ПИСАТЬ), если бы он был выполнен, вызвал бы установку LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) на значение, превышающее значение целого-1 или данного, представленного именем-данного-1, во фразе LINAGE (ВЕРСТКА). В этом случае запись выводится на логической странице до или после (в зависимости от используемой фразы) позиционирования устройства на первую строку, которая может быть записана на следующей логической странице, в соответствии со спецификацией фразы LINAGE (ВЕРСТКА). После вывода записи и позиционирования устройства выполняется повелительный-оператор-1 фразы END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ), если она указана. Условие переполнения страницы возникает в том случае, когда в результате выполнения данного оператора WRITE (ПИСАТЬ) значение LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) одновременно превысит значение целого-2 или данного, указанного именем-данного-2 фразы LINAGE (ВЕРСТКА), и целого-1 или данного, указанного именем-данного-1 фразы LINAGE (ВЕРСТКА). |
Часть 8. МОДУЛЬ ОТНОСИТЕЛЬНОГО ВВОДА-ВЫВОДА
1. ВВЕДЕНИЕ В МОДУЛЬ ОТНОСИТЕЛЬНОГО ВВОДА-ВЫВОДА
1.1. Назначение
Модуль относительного ввода-вывода обеспечивает возможность произвольного или последовательного доступа к записям файла массовой памяти. Каждая запись относительного файла однозначно идентифицируется целой положительной величиной, указывающей относительную позицию логической записи в файле.
1.2. Характеристика уровней
Уровень 1 относительного ввода-вывода обеспечивает ограниченные возможности для статьи управления файлом, статьи описания файла и статей в параграфе I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 1 относительного ввода-вывода обеспечивает ограниченные возможности операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), USE (ИСПОЛЬЗОВАТЬ), WRITE (ПИСАТЬ) и полные возможности оператора DELETE (УДАЛИТЬ).
Уровень 2 относительного ввода-вывода обеспечивает полные возможности для статьи управления файлом и статей в параграфе I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 2 относительного ввода-вывода обеспечивает полные возможности операторов CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ), USE (ИСПОЛЬЗОВАТЬ) и WRITE (ПИСАТЬ). |
1.3. Понятия языка
1.3.1. Организация
Файл с относительной организацией является файлом массовой памяти, любая запись которого может быть запомнена или извлечена по значению относительного номера записи.
Концептуально файл с относительной организацией состоит из последовательной цепочки областей, каждая из которых может содержать логическую запись. Каждой из этих областей назначается относительный номер записи. Каждая логическая запись относительного файла идентифицируется относительным номером записи ее области памяти. Например, десятая запись - это запись, адресуемая относительным номером записи 10 и находящаяся в десятой области записи, независимо от того, были заполнены первые девять областей или нет.
Для получения более эффективного доступа к записям в относительном файле число позиций литер, резервируемое в запоминающей среде для хранения логической записи, может отличаться от числа позиций литер в описании этой записи в программе.
1.3.2. Методы доступа
При произвольном доступе к файлу операторы ввода-вывода применяются для доступа к записям в порядке, указанном программистом. В случае файла с относительной организацией программист указывает требуемую запись, помещая ее относительный номер в данное, определенное как относительный ключ.
При динамическом доступе программист может произвольно переходить от последовательного доступа к произвольному и наоборот, применяя соответствующие формы операторов ввода-вывода. |
1.3.3. Указатель позиции файла
Указатель позиции файла - это логическое понятие, используемое в этом документе для облегчения точной спецификации следующей записи, к которой должен осуществляться доступ при выполнении заданных операций ввода-вывода. На установку указателя позиции файла влияют только операторы CLOSE (3AКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ)
1.3.4. Состояние ввода-вывода
Состояние ввода-вывода - это логическое понятие, характеризующееся двухсимвольным значением, которое устанавливается для указания состояния операции ввода-вывода во время выполнения операторов CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ),
Состояние ввода-вывода определяет также, будет ли выполняться процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Если возникает любое условие, отличное от тех, которые определены ниже как "успешное завершение", может выполняться указанная процедура по правилам, заданным для оператора USE (ИСПОЛЬЗОВАТЬ). Если возникает одно из условий "успешное завершение", никакая процедура такого типа не будет выполняться (п.4.8 настоящей части).
Некоторые классы значений состояния ввода-вывода задают критические условия ошибки. К таким значениям относятся значения, которые начинаются с цифры 3 или 4, а также значения, начинающиеся с цифры 9, которые определяются реализацией как критические. Если значение состояния ввода-вывода для операции ввода-вывода задает такое условие ошибки, реализацией определяются действия, которые предпринимаются после выполнения применимой процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), или, если ни одна такая процедура не применима, после завершения стандартной системной процедуры обработки ошибок ввода-вывода. Состояние ввода-вывода задает одно из следующих условий, возникающих после завершения операции ввода-вывода:
(1) успешное завершение. Оператор ввода-вывода выполнился успешно;
(2) в конце. Оператор последовательного чтения был выполнен неуспешно из-за того, что возникло условие конца файла;
(3) ошибка ключа. Оператор ввода-вывода выполнен неуспешно из-за того, что возникло условие ошибки ключа;
(4) постоянная ошибка. Оператор ввода-вывода выполнен неуспешно в результате ошибки, которая исключает дальнейшую обработку файла. Выполняются все заданные процедуры обработки ошибочных ситуаций. Условие постоянной ошибки остается действующим на все последующие операции ввода-вывода файла до тех пор, пока не будут вызваны определенные реализацией средства для устранения условия постоянной ошибки;
(5) логическая ошибка. Оператор ввода-вывода выполнен неуспешно из-за недопустимой последовательности операций ввода-вывода, выполняемых над файлом, или в результате нарушения ограничений, заданных пользователем.
(6) ошибка, определяемая реализацией. Оператор ввода-вывода выполнен неуспешно в результате возникновения условия, определенного реализацией.
Ниже приводится список значений, помещаемых в состояние ввода-вывода для перечисленных выше условий, возникающих в результате выполнения операций ввода-вывода для относительного файла. Если применимо более одного значения, значение, которое помещается в состояние ввода-вывода, определяется реализацией.
(1) Успешное завершение
а) Состояние ввода-вывода=00. Оператор ввода-вывода выполнился успешно и нет никакой другой доступной информации об операции ввода-вывода.
б) Состояние ввода-вывода=04. Оператор READ (ЧИТАТЬ) выполнился успешно, но длина обрабатываемой записи не соответствует фиксированным свойствам этого файла.
в) Состояние ввода-вывода=05. Оператор OPEN (ОТКРЫТЬ) успешно выполнился, но указанный в нем необязательный файл во время выполнения оператора OPEN (ОТКРЫТЬ) отсутствует. Если режим открытия I-O (ВХОДНОЙ-ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ), файл будет создаваться. |
(2) Условие "в конце" с неуспешным завершением
а) Состояние ввода-вывода=10. Делается попытка выполнить последовательный оператор READ (ЧИТАТЬ), а в файле не существует следующей логической записи из-за того, что:
1) достигнут конец файла;
2) делается попытка выполнить последовательный оператор READ (ЧИТАТЬ) в первый раз для отсутствующего необязательного входного файла. |
б) Состояние ввода-вывода=14.
Делается попытка выполнить последовательный оператор READ (ЧИТАТЬ) для относительного файла, и число значащих цифр в относительном номере записи больше, чем размер относительного ключа, описанного для файла.
(3) Условие ошибки ключа с неуспешным завершением
а) Состояние ввода-вывода=22. Сделана попытка записать запись, в результате которой был бы создан дублирующий ключ в относительном файле.
б) Состояние ввода-вывода=23. Это условие возникает, если:
1) сделана попытка произвольного доступа к записи, которой нет в файле, или
2) сделана попытка выполнить оператор START (ПОДВЕСТИ) или READ (ЧИТАТЬ) с произвольным доступом для необязательного входного файла, который отсутствует. |
в) Состояние ввода-вывода=24. Сделана попытка занесения записей в относительный файл вне его границ, определенных внешним образом. Способ определения границ описывается реализацией. Возможно, был применен оператор последовательной записи в относительный файл и число значащих цифр в относительном номере записи больше, чем размер данного относительный ключ, определенного для файла.
(4) Условие постоянной ошибки с неуспешным завершением
а) Состояние ввода-вывода=30. Возникла постоянная ошибка и нет никакой другой доступной информации об операции ввода-вывода.
б) Состояние ввода-вывода=35. Постоянная ошибка возникла из-за того, что делается попытка выполнить оператор OPEN (ОТКРЫТЬ) с фразой INPUT (ВХОДНОЙ), I-O (ВХОДНОЙ-ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ) для файла, который обязательно должен присутствовать, но не присутствует.
в) Состояние ввода-вывода=37. Постоянная ошибка возникла из-за того, что оператор OPEN (ОТКРЫТЬ) выдан для файла, который не поддерживает режим, заданный в операторе OPEN (ОТКРЫТЬ). Возможны следующие нарушения:
1) задана фраза
2) задана фраза I-O (ВХОДНОЙ-ВЫХОДНОЙ), а файл не допускает операции ввода и вывода, которые разрешены для относительного файла, открываемого в режиме ввода-вывода;
3) задана фраза INPUT (ВХОДНОЙ), а файл не допускает операции чтения.
г) Состояние ввода-вывода=38. Постоянная ошибка возникла из-за того, что выдан оператор OPEN (ОТКРЫТЬ) для файла, ранее закрытого с замком.
д) Состояние ввода-вывода=39. Оператор OPEN (ОТКРЫТЬ) завершился неуспешно из-за обнаруженного для этого файла несоответствия фиксированных свойств файла и свойств, заданных в программе.
(5) Условие логической ошибки с неуспешным завершением
а) Состояние ввода-вывода=41. Оператор OPEN (ОТКРЫТЬ) выдан для открытого файла.
б) Состояние ввода-вывода=42. Оператор CLOSE (ЗАКРЫТЬ) выдан для неоткрытого файла.
в) Состояние ввода-вывода=43. При последовательном методе доступа последний оператор ввода-вывода, выполненный для файла до выполнения оператора DELETE (УДАЛИТЬ) или REWRITE (ОБНОВИТЬ), не является успешно выполненным оператором READ (ЧИТАТЬ).
г) Состояние ввода-вывода=44. Нарушение границ возникает по следующим причинам:
1) совершена попытка записать или обновить запись, которая длиннее максимально допустимой или короче минимально допустимой в соответствии с фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО), связанной с именем-файла; |
2) на уровне 1 сделана попытка обновить запись относительного файла, а размер заменяющей записи отличен от размера заменяемой записи.
д) Состояние ввода-вывода=46. Выдан оператор последовательного чтения для файла, открытого в режиме ввода или ввода-вывода, и не была установлена правильная следующая запись по одной из следующих причин:
1) предыдущий оператор START (ПОДВЕСТИ) закончился неуспешно, или |
2) предыдущий оператор READ (ЧИТАТЬ) закончился неуспешно, но не вызвал условие "в конце", или
3) предыдущий оператор READ (ЧИТАТЬ) вызвал условие "в конце".
е) Состояние ввода-вывода=47. Был выдан оператор READ (ЧИТАТЬ)
ж) Состояние ввода-вывода=48. Был выдан оператор WRITE (ПИСАТЬ) для файла, не открытого в режиме ввода-вывода, вывода
з) Состояние ввода-вывода=49. Был выдан оператор DELETE (УДАЛИТЬ) или REWRITE (ОБНОВИТЬ) для файла, не открытого в режиме ввода-вывода.
(6) Определяемое реализацией условие с неуспешным завершением
а) Состояние ввода-вывода=9х. Существуют определяемые реализацией условия. Эти условия не должны дублировать никакие условия, определенные для значений от 00 до 49 состояния ввода-вывода. Значения
1.3.5. Условие ошибки ключа
Условие ошибки ключа может возникнуть в результате выполнения операторов DELETE (УДАЛИТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ),
Если условие ошибки ключа возникает после выполнения операции ввода-вывода, определенной в операторе ввода-вывода, то происходит следующие действия в указанном порядке:
(1) состояние ввода-вывода определителя файла, связанного с оператором, устанавливается в значение, определяющее условие ошибки ключа (см. п.1.3.4 настоящей части);
(2) если в операторе ввода-вывода указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), то никакая процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), связанная с определителем файла, не выполняется, и управление передается повелительному оператору, указанному во фразе INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА). Выполнение продолжается в соответствии с правилами для каждого оператора, указанного в этом повелительном операторе. Если выполняется оператор ветвления процедуры или условный оператор, который вызывает явную передачу управления, то управление передается в соответствии с правилами для этого оператора; в противном случае после завершения выполнения повелительного оператора, указанного во фразе INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), управление передается в конец оператора ввода-вывода, а фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), если она указана, игнорируется (п.4.8 настоящей части);
(3) если в операторе ввода-вывода фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) не указана, то с определителем файла должна быть связана процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), и эта процедура выполняется, а управление передается в соответствии с правилами оператора USE (ИСПОЛЬЗОВАТЬ). Если указана фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), то она игнорируется (п.4.8 настоящей части).
Если после выполнения операции ввода-вывода, указанной в операторе ввода-вывода, условия ошибки ключа нет, то фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), если она указана, игнорируется. Состояние ввода-вывода определителя файла, связанного с оператором, обновляется, и выполняются следующие действия:
(1) если возникает условие ошибки, которое не является условием ошибки ключа, то управление передается в соответствии с правилами оператора USE (ИСПОЛЬЗОВАТЬ), а затем выполняется процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), связанная с определителем файла (п.4.8 настоящей части);
(2) если условие ошибки не возникает, то управление передается в конец оператора ввода-вывода или повелительному оператору, указанному во фразе NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА). В последнем случае выполнение продолжается в соответствии с правилами для каждого оператора, указанного в повелительном операторе. Если выполняется оператор ветвления процедуры или условный оператор, который вызывает явную передачу управления, то управление передается в соответствии с правилами для этого оператора; в противном случае, после завершения выполнения повелительного оператора, указанного во фразе NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), управление передается в конец оператора ввода-вывода.
1.3.6. Условие "в конце"
Условие "в конце" может возникнуть в результате выполнения оператора READ (ЧИТАТЬ) (п.4.5 настоящей части).
1.3.7. Условие противоречия свойств файла
Условие противоречия свойств файла может возникнуть в результате выполнения операторов OPEN (ОТКРЫТЬ), REWRITE (ОБНОВИТЬ) и WRITE (ПИСАТЬ). При возникновении условия противоречия свойств файла выполнение оператора ввода-вывода, который обнаружил это условие, считается неуспешным и файл не изменяется (пп.4.4, 4.7, 4.9 настоящей части).
При обнаружении условия противоречия свойств файла выполняются следующие действия в указанном ниже порядке:
(1) в состояние ввода-вывода, связанное с именем файла, помещается значение, указывающее на условие противоречия свойств файла (см. п.1.3.5 настоящей части);
(2) если для данного имени-файла задана процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), выполняется указанная процедура.
2. РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ ОТНОСИТЕЛЬНОГО ВВОДА-ВЫВОДА
2.1. Секция ввода-вывода
Информация, относящаяся к секции ввода-вывода, находится в ч.7, п.2.1.
2.2. Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ)
Информация о параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) находится в ч.7, п.2.2.
2.3. Статья управления файлом
2.3.1. Назначение
Статья управления файлом объявляет существенные физические свойства относительного файла.
2.3.2. Общий формат
2.3.3. Синтаксические правила
(1) В статье управления файлом фраза SELECT (ДЛЯ) должна указываться первой. Фразы, которые следуют за фразой SELECT (ДЛЯ), могут появляться в любом порядке.
(2) Каждое имя-файла из раздела данных должно быть определено в параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) только один раз. Каждое имя-файла, указанное в фразе SELECT (ДЛЯ), должно иметь статью описания файла в разделе данных той же самой программы.
(3) Литерал-1 должен быть нечисловым литералом и не должен быть стандартной константой. Значение и правила для допустимого содержимого имени-реализации-1 и значения литерала-1 определяются реализацией.
2.3.4. Общие правила
(1) Если определитель файла, на который ссылается имя-файла-1, является внешним определителем файла (ч.10, п.4.5), все статьи управления файлом в единице исполнения, которые ссылаются на этот определитель файла, должны иметь:
а) одну и ту же спецификацию фразы OPTIONAL (НЕОБЯЗАТЕЛЬНОГО); |
б) корректную спецификацию для имени-реализации-1 или литерала-1 во фразе ASSIGN (НАЗНАЧИТЬ). Правила корректности имени-реализации-1 и литерала-1 определяются реализацией;
в) одно и то же значение целого-1 во фразе RESERVE (РЕЗЕРВИРОВАТЬ); |
г) одну и ту же организацию;
д) один и тот же метод доступа;
ж) одно и то же внешнее данное для имени-данного-1 во фразе RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ).
(2) Для данных внешней среды принимается внутренний набор литер.
(3) Фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) применима только к файлам, открытым в режиме ввода, ввода-вывода или дополнения. Ее указание требуется для файлов, которые могут отсутствовать во время выполнения объектной программы. |
(4) Фраза ASSIGN (НАЗНАЧИТЬ) задает связь между файлом, на который ссылается имя-файла-1, и запоминающей средой, на которую ссылается имя-реализации-1 или литерал-1. |
(5) Фраза RESERVE (РЕЗЕРВИРОВАТЬ) для модуля относительного ввода-вывода та же, что и для модуля последовательного ввода-вывода. Описание фразы RESERVE (РЕЗЕРВИРОВАТЬ) находится в ч.7, п.2.9. |
(6) Фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА) для модуля относительного ввода-вывода та же, что и для модуля последовательного ввода-вывода. Описание фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) находится в ч.7, п.2.5. Содержимое данного, связанного с фразой FILE STATUS (СОСТОЯНИЕ ФАЙЛА) относительного файла, определяется в п.1.3.4 настоящей части.
(7) Фразы ACCESS MODE (ДОСТУП) и ORGANIZATION IS RELATIVE (ОРГАНИЗАЦИЯ ОТНОСИТЕЛЬНАЯ) описываются ниже.
2.4. Фраза ACCESS MODE (ДОСТУП)
2.4.1. Назначение
Фраза ACCESS MODE (ДОСТУП) задает порядок, в котором осуществляется доступ к записям в файле.
2.4.2. Общий формат
2.4.3. Синтаксические правила
(1) Имя-данного-1 может быть уточнено.
(2) Имя-данного-1 должно ссылаться на данное, описанное как целое без знака, не содержащее в описании шаблона литеры Р (М).
(3) Имя-данного-1 не должно быть определено в статье описания записи, связанной с этим именем-файла.
(4) Фраза ACCESS MODE IS RANDOM (ДОСТУП ПРОИЗВОЛЬНЫЙ) не должна быть указана для имен-файлов, указанных в фразах USING (ИСПОЛЬЗУЯ) или GIVING (ПОЛУЧАЯ) операторов SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ).
(5) Если на относительный файл ссылаются в операторе START (ПОДВЕСТИ), для этого файла должна быть указана фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) во фразе ACCESS MODE (ДОСТУП). |
2.4.4. Общие правила
(1) Если фраза ACCESS MODE (ДОСТУП) не задана, предполагается последовательный доступ.
(2) Если доступ последовательный, записи становятся доступными в последовательности, диктуемой организацией файла. Эта последовательность есть возрастающая последовательность относительных номеров записей, находящихся в файле.
(3) Если доступ произвольный, значение данного, определенного как относительный ключ, указывает на запись, к которой должен быть осуществлен доступ.
(4) Если доступ динамический, к записям файла можно обращаться методом последовательного и (или) произвольного доступа. |
(5) Записи в относительном файле однозначно идентифицируются относительными номерами записей. Относительный номер записи указывает порядковую позицию логической записи в файле. Первая логическая запись имеет относительный номер записи 1, следующие логические записи имеют относительные номера 2, 3, 4 и так далее.
(6) Данное, представленное именем-данного-1, используется для передачи относительного номера записи между пользователем и СУМП.
(7) Данное, представляющее относительный ключ, связанный с выполнением оператора ввода-вывода, является данным, на которое ссылается имя-данного-1 во фразе ACCESS MODE (ДОСТУП).
(8) Если соответствующий определитель файла является внешним определителем файла, то каждая статья управления файлом в единице исполнения, связанная с этим определителем файла, должна указывать один и тот же метод доступа. Кроме того, имя-данного-1 должно ссылаться на внешнее имя-данного, и фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) в каждой соответствующей статье управления файлом должна в каждом случае ссылаться на одно и то же внешнее имя-данного.
2.5. Фраза ORGANIZATION IS RELATIVE (ОРГАНИЗАЦИЯ ОТНОСИТЕЛЬНАЯ)
2.5.1. Назначение
Фраза ORGANIZATION IS RELATIVE (ОРГАНИЗАЦИЯ ОТНОСИТЕЛЬНАЯ) определяет относительную организацию как логическую структуру файла.
2.5.2. Общий формат
2.5.3. Общие правила
(1) Фраза ORGANIZATION IS RELATIVE (ОРГАНИЗАЦИЯ ОТНОСИТЕЛЬНАЯ) определяет относительную организацию как логическую структуру файла. Организация файла устанавливается при создании файла и впоследствии не может быть изменена.
(2) Относительная организация является постоянной логической структурой файла, в которой каждая запись однозначно определяется целым значением больше нуля, которое указывает порядковую позицию записи в файле.
2.6. Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ)
2.6.1. Назначение
Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) указывает контрольные точки для перепрогона, а также общие области памяти, которые могут совместно использоваться различными файлами. Фраза RERUN (ПЕРЕПРОГОН) параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) рассматривается в настоящем стандарте как устаревший элемент и будет удалена в следующей редакции стандарта.
2.6.2. Общий формат
2.6.3. Общие правила
(1) Фраза RERUN (ПЕРЕПРОГОН) для модуля относительного ввода-вывода является подмножеством фразы RERUN (ПЕРЕПРОГОН) модуля последовательного ввода-вывода. Описание фразы RERUN (ПЕРЕПРОГОН) см. в ч.7, п.2.12.
(2) Фраза SAME (ОБЩАЯ) для модуля относительного ввода-вывода та же, что и для модуля последовательного ввода-вывода. Описание фразы SAME (ОБЩАЯ) см. в ч.7, п.2.13.
3. РАЗДЕЛ ДАННЫХ В МОДУЛЕ ОТНОСИТЕЛЬНОГО ВВОДА-ВЫВОДА
3.1. Секция файлов
Информацию о секции файлов см. в ч.7, п.3.1.
3.2. Статья описания файла
3.2.1. Назначение
Статья описания файла содержит применимую к относительному файлу информацию о физической структуре, идентификации и именах записей.
3.2.2. Общий формат
3.2.3. Синтаксические правила
(1) Индикатор уровня FD (ОФ) идентифицирует начало статьи описания файла и должен предшествовать имени-файла-1.
(2) Фразы, которые следуют за именем-файла-1, могут задаваться в любом порядке.
(3) Одна или несколько статей описания записи должны следовать за статьей описания файла.
3.2.4. Общие правила
(1) Статья описания файла связывает имя-файла-1 с определителем файла.
(2) Фраза BLOCK CONTAINS (В БЛОКЕ) для модуля относительного ввода-вывода та же, что и для модуля последовательного ввода-вывода. Описание фразы BLOCK CONTAINS (В БЛОКЕ) находится в ч.7, п.3.3.
(3) Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) для модуля относительного ввода-вывода такая же, как и для модуля последовательного ввода-вывода. Описание фразы DATA RECORDS (ЗАПИСИ ДАННЫХ) находится в ч.7, п.3.5. Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) рассматривается в настоящем стандарте как устаревший элемент и будет удалена в следующей редакции стандарта.
(4) Фраза LABEL RECORD (МЕТКИ) для модуля относительного ввода-вывода такая же, как и для модуля последовательного ввода-вывода. Описание фразы LABEL RECORD (МЕТКИ) находится в ч.7, п.3.6. Фраза LABEL RECORD (МЕТКИ) рассматривается в настоящем стандарте как устаревший элемент и будет удалена в следующей редакции стандарта.
(5) Фраза RECORD (В ЗАПИСИ) для модуля относительного ввода-вывода такая же, как и для модуля последовательного ввода-вывода. Описание фразы RECORD (В ЗАПИСИ) находится в ч.7, п.3.8.
(6) Фраза VALUE OF (ЗНАЧЕНИЕ) для модуля относительного ввода-вывода такая же, как и для модуля последовательного ввода-вывода. Описание фразы VALUE OF (ЗНАЧЕНИЕ) находится в ч.7, п.3.9. Фраза VALUE OF (ЗНАЧЕНИЕ) рассматривается в настоящем стандарте как устаревший элемент и будет удалена в следующей редакции стандарта.
4. РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ ОТНОСИТЕЛЬНОГО ВВОДА-ВЫВОДА
4.1. Общее описание
Если оператор USE (ИСПОЛЬЗОВАТЬ) модуля относительного ввода-вывода имеется в исходной Кобол-программе, раздел процедур содержит декларативные процедуры. Ниже приводится общий формат раздела процедур для случая, когда оператор USE (ИСПОЛЬЗОВАТЬ) указан.
4.2. Оператор CLOSE (ЗАКРЫТЬ)
4.2.1. Назначение
Оператор CLOSE (ЗАКРЫТЬ) завершает обработку файла,
4.2.2. Общий формат
4.2.3. Синтаксическое правило
Файлы, перечисленные в операторе CLOSE (ЗАКРЫТЬ), могут иметь различную организацию и доступ.
4.2.4. Общие правила
(1) Оператор CLOSE (ЗАКРЫТЬ) может быть использован только для файла, который был открыт.
(2) Относительные файлы классифицируются как принадлежащие к категории непоследовательных однотомных или многотомных файлов. Результаты выполнения оператора CLOSE (ЗАКРЫТЬ) для этой категории файлов приведены ниже.
Формат оператора CLOSE (ЗАКРЫТЬ) | Действия операторов CLOSE (ЗАКРЫТЬ) для непоследовательного однотомного (многотомного) файла |
CLOSE (ЗАКРЫТЬ) | А |
CLOSE WITH LOCK (ЗАКРЫТЬ С ЗАМКОМ) | А, Б |
Определения символов А и Б приведены ниже.
Там, где эти определения зависят от того, является ли файл входным, выходным или входным-выходным, приводятся дополнительные пояснения; в противном случае эти определения относятся к входным, выходным и входным-выходным файлам.
А - закрыть файл.
Входные и входные-выходные файлы (доступ последовательный). Если файл установлен в конце и указаны записи меток для этого файла, метки обрабатываются в соответствии со стандартной процедурой обработки меток, определенной реализацией. Действия оператора CLOSE (ЗАКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют, или когда записи меток не специфицированы, но присутствуют. Выполняются операции закрытия, определенные реализацией. Если файл установлен в конце и записи меток для него не специфицированы, метки не обрабатываются, но другие операции закрытия, определенные реализацией, выполняются. Если файл установлен не в конце, операции закрытия, определенные реализацией, выполняются, но конечные метки не обрабатываются.
Б - закрыть с замком. Файл закрыт и не может быть опять открыт во время выполнения этой единицы исполнения. |
(3) Выполнение оператора CLOSE (ЗАКРЫТЬ) приводит к изменению значения состояния ввода-вывода, относящегося к имени-файла-1 (см. п.1.3.4 настоящей части). |
(4) Если не присутствует необязательный входной файл, для файла не производится обработка конца файла, и указатель позиции файла не меняется. |
(5) После успешного завершения оператора CLOSE (ЗАКРЫТЬ) область записи, связанная с именем-файла, становится недоступной. В случае неуспешного выполнения оператора CLOSE (ЗАКРЫТЬ) доступность области записи является неопределенной.
(6) После успешного завершения оператора CLOSE (ЗАКРЫТЬ) файл перестает быть открытым, он больше не связан ни с каким определителем файла.
(7) Если в операторе CLOSE (ЗАКРЫТЬ) указаны несколько имен-файлов, результат выполнения этого оператора CLOSE (ЗАКРЫТЬ) такой же, как если бы отдельный оператор CLOSE (ЗАКРЫТЬ) был написан для каждого имени файла в том порядке, как они указаны в этом операторе CLOSE (ЗАКРЫТЬ).
4.3. Оператор DELETE (УДАЛИТЬ)
4.3.1. Назначение
Оператор DELETE (УДАЛИТЬ) логически удаляет запись из файла массовой памяти.
4.3.2. Общий формат
DELETE имя-файла-1 RECORD | |||
[INVALID KEY ловелительный-оператор-1] | |||
[NOT INVALID KEY повелительный-оператор-2] | |||
[END-DELETE] | |||
УДАЛИТЬ ЗАПИСЬ имя-файла | |||
[ПРИ ОШИБКЕ КЛЮЧА повелительный-оператор-1] | |||
[БЕЗ ОШИБКИ КЛЮЧА повелительный-оператор-2] | |||
[КОНЕЦ-УДАЛИТЬ] |
4.3.3. Синтаксические правила
(1) Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) не должна указываться для оператора DELETE (УДАЛИТЬ), который ссылается на файл с последовательным доступом.
(2) Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) должна быть указана в операторе DELETE (УДАЛИТЬ), который ссылается на файл не с последовательным доступом и для которого не определена процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
4.3.4. Общие правила
(1) Файл, представленный именем-файла-1, должен быть файлом массовой памяти. Он должен быть открыт для ввода-вывода ко времени выполнения этого оператора (п.4.4 настоящей части).
(2) Для файлов с последовательным доступом последним оператором ввода-вывода, выполняемым для имени-файла-1 перед выполнением оператора DELETE (УДАЛИТЬ), должен быть успешно выполненный оператор READ (ЧИТАТЬ). Система управления массовой памятью логически удаляет из файла запись, которая была извлечена по оператору READ (ЧИТАТЬ).
(3) Для файла с произвольным
(4) После успешного выполнения оператора DELETE (УДАЛИТЬ) идентифицированная запись логически удаляется из файла и становится недоступной.
(6) Выполнение оператора DELETE (УДАЛИТЬ) не влияет на указатель позиции файла.
(7) При выполнении оператора DELETE (УДАЛИТЬ) обновляется значение состояния ввода-вывода, связанного с именем-файла-1 (см. п.1.3.4 настоящей части).
(8) Передача управления после успешного или неуспешного выполнения оператора DELETE (УДАЛИТЬ) зависит от наличия или отсутствия в операторе DELETE (УДАЛИТЬ) необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) (см. п.1.3.5 настоящей части).
(9) Фраза END-DELETE (КОНЕЦ-УДАЛИТЬ) ограничивает область действия оператора DELETE (УДАЛИТЬ) (см. ч.4, п.6.4.3).
4.4. Оператор OPEN (ОТКРЫТЬ)
4.4.1. Назначение
Оператор OPEN (ОТКРЫТЬ) подготавливает файл к обработке.
4.4.2. Общий формат
4.4.3. Синтаксические правила
(1) Фраза EXTEND (ДОПОЛНЯЕМЫЙ) должна использоваться только для файлов с последовательным доступом. |
(2) Файлы, перечисленные в операторе OPEN (ОТКРЫТЬ), могут иметь различную организацию и доступ.
4.4.4. Общие правила
(1) Успешное выполнение оператора OPEN (ОТКРЫТЬ) делает файл доступным для обработки и переводит файл в режим открытия.
Успешное выполнение оператора OPEN (ОТКРЫТЬ) связывает файл с именем-файла посредством определителя файла.
Файл доступен, если он физически имеется в наличии и распознан системой управления вводом-выводом. Приведенная ниже табл.1 демонстрирует результаты открытия доступных и недоступных файлов.
Таблица 1
Фраза оператора | Файл доступен | Файл недоступен |
INPUT (ВХОДНОЙ) | Нормальное открытие | Открытие неуспешное |
INPUT (ВХОДНОЙ) (необязательный файл) | Нормальное открытие | Нормальное открытие; при первом чтении возникает условие конца или условие ошибки ключа |
I-O (ВХОДНОЙ-ВЫХОДНОЙ) | Нормальное открытие | Открытие неуспешное |
I-O (ВХОДНОЙ-ВЫХОДНОЙ) (необязательный файл) | Нормальное открытие | Открытие приводит к созданию файла |
OUTPUT (ВЫХОДНОЙ) | Нормальное открытие; файл не содержит записей | Открытие приводит к созданию файла |
EXTEND (ДОПОЛНЯЕМЫЙ) | Нормальное открытие | Открытие неуспешное |
EXTEND (ДОПОЛНЯЕМЫЙ) (необязательный файл) | Нормальное открытие | Открытие приводит к созданию файла |
(2) Успешное выполнение оператора OPEN (ОТКРЫТЬ) делает область записи доступной программе. Если определитель файла, связанный с именем файла, является внешним, то существует единственная область записи, связанная с определителем, для единицы исполнения.
(3) Если файл не открыт, не может быть выполнен ни один оператор, явно или неявно относящийся к файлу, за исключением оператора MERGE (СЛИТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ), оператора OPEN (ОТКРЫТЬ) или оператора SORT (СОРТИРОВАТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ).
(4) Оператор OPEN (ОТКРЫТЬ) должен быть успешно выполнен перед выполнением любого другого допустимого оператора ввода-вывода.
В табл.2 x означает, что указанный оператор, используемый при указанном в строке методе доступа, может использоваться в режиме открытия, заданном в заголовке столбца.
Таблица 2
Метод доступа | Оператор | Режим открытия | |||
для ввода | для вывода | для ввода-вывода | для допол- | ||
Последовательный | READ (ЧИТАТЬ) | x | x | ||
WRITE (ПИСАТЬ) | x | x | |||
REWRITE (ОБНОВИТЬ) | x | ||||
START (ПОДВЕСТИ) | x | x | |||
DELETE (УДАЛИТЬ) | x | ||||
Произвольный | READ (ЧИТАТЬ) | x | x | ||
WRITE (ПИСАТЬ) | x | x | |||
REWRITE (ОБНОВИТЬ) | x | ||||
START (ПОДВЕСТИ) | |||||
DELETE (УДАЛИТЬ) | x | ||||
Динамический | READ (ЧИТАТЬ) | x | x | ||
WRITE (ПИСАТЬ) | x | x | |||
REWRITE (ОБНОВИТЬ) | x | ||||
START (ПОДВЕСТИ) | x | x | |||
DELETE (УДАЛИТЬ) | х |
(6) Выполнение оператора OPEN (ОТКРЫТЬ) не извлекает и не записывает первую запись данных.
(7) Если указаны записи меток для файла, начальные метки обрабатываются следующим образом:
а) когда указана фраза INPUT (ВХОДНОЙ), оператор ОРЕN (ОТКРЫТЬ) осуществляет проверку меток в соответствии с процедурами, определенными реализацией для проверки входных меток;
б) когда указана фраза OUTPUT (ВЫХОДНОЙ), выполнение оператора OPEN (ОТКРЫТЬ) вызывает запись меток в соответствии с процедурами, определенными реализацией для записи выходных меток.
Действия оператора OPEN (ОТКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют или не специфицированы, но присутствуют.
(8) Если во время выполнения оператора ОРЕN (ОТКРЫТЬ) возникает условие противоречия свойств файла, выполнение оператора OPEN (ОТКРЫТЬ) считается неуспешным (см. п.1.3.7 настоящей части).
(9) Если файл, открытый с фразой INPUT (ВХОДНОЙ), является необязательным файлом, не имеющимся в наличии, оператор OPEN (ОТКРЫТЬ) устанавливает указатель позиции файла для указания того, что необязательный входной файл отсутствует. |
(10) Если файл открыт с фразами INPUT (ВХОДНОЙ) или I-O (ВХОДНОЙ-ВЫХОДНОЙ), указатель позиции файла устанавливается на единицу. |
(11) Если указана фраза EXTEND (ДОПОЛНЯЕМЫЙ), оператор OPEN (ОТКРЫТЬ) устанавливает файл непосредственно после его последней логической записи. Последней логической записью относительного файла является существующая в данный момент запись с наибольшим относительным номером записи. (12) Если задана фраза EXTEND (ДОПОЛНЯЕМЫЙ) и фраза LABEL RECORD (МЕТКИ) указывает, что записи меток присутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие действия: а) начальные метки файла обрабатываются только для однокатушечных или однотомных файлов; б) начальные метки катушки (тома) обрабатываются на последней катушке (томе), как если бы файл открывался как INPUT (ВХОДНОЙ); в) имеющиеся конечные метки файла обрабатываются, как если бы файл открывался как INPUT (ВХОДНОЙ). Затем эти метки удаляются; г) затем обработка продолжается, как если бы файл был открыт как OUTPUT (ВЫХОДНОЙ). |
(13) Оператор OPEN (ОТКРЫТЬ) с фразой I-O (ВХОДНОЙ-ВЫХОДНОЙ) должен относиться к файлу, поддерживающему операции ввода и вывода, допустимые для относительного файла, открытого для ввода-вывода. Выполнение оператора OPEN (ОТКРЫТЬ) с фразой I-O (ВХОДНОЙ-ВЫХОДНОЙ) подготавливает файл, на который он ссылается, как для операций ввода, так и для операций вывода.
(14) Если указана фраза I-O (ВХОДНОЙ-ВЫХОДНОЙ) и во фразе LABEL RECORD (МЕТКИ) указано, что записи меток присутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие шаги:
а) проверку меток в соответствии с процедурами, определенными реализацией для проверки входных-выходных меток;
б) Запись новых меток в соответствии с процедурами, определенными реализацией для записи входных-выходных меток.
(15) Для необязательного файла, являющегося недоступным, успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразами I-O (ВХОДНОЙ-ВЫХОДНОЙ)
OPEN OUTPUT имя-файла.
CLOSE имя-файла.
ОТКРЫТЬ ВЫХОДНОЙ имя-файла.
ЗАКРЫТЬ имя-файла.
За этими операторами следует выполнение оператора OPEN (ОТКРЫТЬ), указанного в исходной программе.
Успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) приводит к созданию файла, после которого этот файл не содержит записей.
(16) Во время выполнения оператора OPEN (ОТКРЫТЬ) обновляется значение состояния ввода-вывода, связанного с именем-файла (см. п.1.3.4 настоящей части).
(17) Если в операторе OPEN (ОТКРЫТЬ) указано более, чем одно имя-файла, результат выполнения этого оператора OPEN (ОТКРЫТЬ) такой, как если бы отдельный оператор OPEN (ОТКРЫТЬ) был написан для каждого имени-файла в том порядке, как они указаны в операторе OPEN (ОТКРЫТЬ).
(18) Минимальный и максимальный размеры записей файла устанавливаются во время создания файла и не должны изменяться впоследствии.
4.5. Оператор READ (ЧИТАТЬ)
4.5.1. Назначение
При последовательном доступе оператор READ (ЧИТАТЬ) делает доступной следующую логическую запись файла. При произвольном доступе оператор READ (ЧИТАТЬ) делает доступной указанную запись файла на устройстве массовой памяти.
Формат 1
Формат 2
4.5.3.* Синтаксические правила
_________________
* Нумерация соответствует оригиналу. - .
(1) Область памяти, связанная с идентификатором-1, и область записи, связанная с именем-файла-1, не должны быть одной и той же областью памяти.
(2) Формат 1 должен использоваться для всех файлов с последовательным доступом.
(3) Фраза NEXT (СЛЕДУЮЩУЮ) должна быть указана для файлов с динамическим доступом, если записи файла должны извлекаться последовательно. |
(5) Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) или фраза AT END (В КОНЦЕ) должна быть указана, если для имени-файла-1 не указана никакая применимая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
4.5.4.Общие правила
(1) Во время выполнения оператора READ (ЧИТАТЬ) файл, на который ссылается имя-файла-1, должен быть открыт как входной или входной-выходной (см. п.4.4 настоящей части).
(2) Для файлов с последовательным доступом фраза NEXT (СЛЕДУЮЩУЮ) является необязательной и не оказывает влияния на выполнение оператора READ (ЧИТАТЬ). |
(3) При выполнении оператора READ (ЧИТАТЬ) обновляется значение состояния ввода-вывода, связанного с именем-файла-1 (см. п.1.3.4 настоящей части).
(4) Установка указателя позиции файла в начале выполнения оператора READ (ЧИТАТЬ) формата 1 используется для определения записи, которая может быть доступной согласно следующим правилам. Сравнения для записей в относительных файлах относятся к относительному номеру ключа.
а) Если указатель позиции файла указывает, что не установлена следующая запись, выполнение оператора READ (ЧИТАТЬ) является неуспешным.
б) Если указатель позиции файла указывает,
в) Если указатель позиции файла был установлен предыдущими операторами OPEN (ОТКРЫТЬ) или START (ПОДВЕСТИ), выбирается первая существующая запись файла, относительный номер которой больше или равен указателю позиции файла.
г) Если указатель позиции файла установлен предыдущим оператором READ (ЧИТАТЬ), выбирается первая существующая запись файла, номер записи которой больше указателя позиции файла.
Если найдена запись, удовлетворяющая вышеприведенным правилам, она становится доступной в области записи, связанной с именем-файла-1, если только не указана фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) для имени-файла-1 и число значащих цифр в относительном номере выбранной записи не больше, чем размер самого относительного ключа. В последнем случае указатель позиции файла устанавливается для индикации этого условия, а оператор выполняется согласно общему правилу (10).
Если запись, удовлетворяющая приведенным выше правилам, не найдена, то указатель позиции файла устанавливается для указания того, что не существует следующей логической записи, и выполнение продолжается согласно общему правилу (10).
Если запись доступна, указатель позиции файла устанавливается на относительный номер доступной записи.
(5) Функционирование оператора READ (ЧИТАТЬ) не зависит от метода, используемого для согласования времени доступа со временем обработки; запись доступна объектной программе до выполнения повелительного-оператора-2 или повелительного-оператора-4, если они указаны, или до выполнения любого оператора, следующего за оператором READ (ЧИТАТЬ), если ни повелительный-оператор-2, ни повелительный-оператор-4 не указаны.
(6) Когда логические записи описаны более чем одной статьей описания записи, эти записи автоматически используют одну и ту же область памяти; это эквивалентно неявному переопределению области. По завершении оператора READ (ЧИТАТЬ) значения всех данных, находящихся вне диапазона текущей записи данных, не определены.
(7) Фраза INTO (В) может быть указана в операторе READ (ЧИТАТЬ), если:
а) только одно описание записи подчиняется статье описания файла;
б) все имена-записей, связанные с именем-файла-1, и данное, на которое ссылается идентификатор-1, описывают групповое данное или элементарное буквенно-цифровое данное.
(8) Результат выполнения оператора READ (ЧИТАТЬ) с фразой INTO (В) эквивалентен применению следующих правил в указанном порядке:
а) выполняется тот же оператор READ (ЧИТАТЬ) без фразы INTO (В);
(9) Если во время выполнения оператора READ (ЧИТАТЬ) формата 2 указатель позиции файла указывает, что нет необязательного входного файла, возникает условие ошибки ключа, а выполнение оператора READ (ЧИТАТЬ) является неуспешным (см. п.1.3.5 настоящей части). |
(10) Для оператора READ (ЧИТАТЬ) формата 1, если указатель позиции файла указывает, что не существует следующей логической записи или что число значащих цифр в относительном номере записи больше, чем размер самого относительного ключа,
а) значение, полученное в результате установки указателя позиции файла, присваивается состоянию ввода-вывода, связанному с именем-файла-1, для обозначения условия конца (см. п.1.3.4 настоящей части);
б) если фраза AT END (В КОНЦЕ) указана в операторе, вызвавшем это условие, управление передается повелительному-оператору-1 во фразе AT END (В КОНЦЕ). Никакие процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), связанные с именем-файла-1, не выполняются;
в) если фраза AT END (В КОНЦЕ) не указана, с именем-файла-1 должна быть связана процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), которая в этом случае и выполняется. Возврат из этой процедуры осуществляется к следующему после оператора READ (ЧИТАТЬ) выполнимому оператору.
Если возникает условие конца, выполнение оператора READ (ЧИТАТЬ) является неуспешным.
(11) Если во время выполнения оператора READ (ЧИТАТЬ) не возникают ни условие конца, ни условие ошибки ключа, фразы AT END (В КОНЦЕ) и INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) игнорируются, если они указаны, и выполняются следующие действия:
а) устанавливается значение указателя позиции файла и обновляется значение состояния ввода-вывода, связанного с именем-файла-1;
б) если возникает условие особой ситуации, не являющееся ни условием конца, ни условием ошибки ключа, управление передается процедуре USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ) согласно правилам для оператора USE (ИСПОЛЬЗОВАТЬ), применимого к имени-файла-1 (п.4.8 настоящей части);
в) если условие особой ситуации не существует, запись становится доступной в области записи и выполняются любые неявные пересылки, предопределенные фразой INTO (В). Управление передается в точку выхода оператора READ (ЧИТАТЬ) или повелительному-оператору-2, если он указан. В последнем случае выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется ветвление процедуры или условный оператор, вызывающий явную передачу управления, оно передается в соответствии с правилами для этих операторов, в противном случае после завершения выполнения повелительного-оператора-2 управление передается в точку выхода оператора READ (ЧИТАТЬ).
(12) После неуспешного завершения выполнения оператора READ (ЧИТАТЬ) содержимое соответствующей области записи не определено; указателю позиции файла присвоено значение, указывающее, что правильная следующая запись не установлена.
(13) Для относительного файла, для которого указан динамический метод доступа, формат 1 оператора READ (ЧИТАТЬ) с фразой NEXT (СЛЕДУЮЩУЮ) указывает, что из файла будет извлекаться следующая логическая запись. |
(14) Для относительного файла, если фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) указана для имени-файла-1, при выполнении оператора READ (ЧИТАТЬ) формата 1 относительный номер записи, которая становится доступной, помещается в данное относительный ключ согласно правилам для оператора MOVE (ПОМЕСТИТЬ) (см. ч.6, п.6.19).
(15) Для относительного файла при выполнении оператора READ (ЧИТАТЬ) формата 2 указатель позиции файла устанавливается равным значению данного, на которое ссылается фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) для файла, а запись, относительный номер записи которой равен указателю позиции файла, становится доступной в области записи, связанной с именем-файла-1. Если в файле нет такой записи, возникает условие ошибки ключа, и выполнение оператора READ (ЧИТАТЬ) является неуспешным (см. п.1.3.5 настоящей части).
(16) Если число позиций литер в прочитанной записи меньше минимального размера, указанного статьями описания записей для имени-файла-1, участок области записи, находящийся справа от последней прочитанной литеры, не определен. Если число позиций литер в прочитанной записи больше максимального размера, указанного статьями описания записей для имени-файла-1, запись усекается справа до максимального размера. В обоих случаях выполнение оператора READ (ЧИТАТЬ) считается успешным, а состояние ввода-вывода указывает, что возникло несоответствие длины записи (см. п.1.3.4 настоящей части). |
(17) Фраза END-READ (КОНЕЦ-ЧИТАТЬ) ограничивает область действия оператора READ (ЧИТАТЬ) (см. ч.4, п.6.4.3).
4.6. Оператор REWRITE (ОБНОВИТЬ)
4.6.1. Назначение
Оператор REWRITE (ОБНОВИТЬ) логически заменяет запись в файле на устройстве массовой памяти.
4.6.2. Общий формат
4.6.3. Синтаксические правила
(1) Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.
(2) Имя-записи-1 - это имя логической записи в секции файлов раздела данных. Оно может быть уточнено.
(3) Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) не должна указываться в операторе REWRITE (ОБНОВИТЬ) для файлов с последовательным доступом.
(4) Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) должна быть указана в операторе REWRITE (ОБНОВИТЬ) для файлов с произвольным
4.6.4. Общие правила
(1) Во время выполнения этого оператора файл, связанный с именем-записи-1, должен быть файлом массовой памяти и должен быть открыт как входной-выходной (см. ч.7, п.4.3).
(2) Для файлов с последовательным доступом последним оператором ввода-вывода для соответствующего файла перед выполнением оператора REWRITE (ОБНОВИТЬ) должен быть успешно выполненный оператор READ (ЧИТАТЬ). СУМП логически заменяет запись, которая была извлечена оператором READ (ЧИТАТЬ).
(5) Выполнение оператора REWRITE (ОБНОВИТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентно выполнению следующих операторов в указанном порядке:
а) оператор
MOVE идентификатор-1 INTO имя-записи-1
ПОМЕСТИТЬ идентификатор-1 В имя-записи-1
соответственно правилам, описанным для оператора MOVE (ПОМЕСТИТЬ);
б) тот же оператор REWRITE (ОБНОВИТЬ) без фразы FROM (ИЗ ПОЛЯ).
(7) Выполнение оператора REWRITE (ОБНОВИТЬ) не влияет на указатель позиции файла.
(8) Выполнение оператора REWRITE (ОБНОВИТЬ) вызывает обновление состояния ввода-вывода для файла, связанного с именем-записи-1 (см. п.1.3.4 настоящей части).
(9) При выполнении оператора REWRITE (ОБНОВИТЬ) логическая запись передается операционной системе.
(10) Передача управления после успешного или неуспешного выполнения оператора REWRITE (ОБНОВИТЬ) зависит от наличия или отсутствия в операторе REWRITE (ОБНОВИТЬ) необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) (см. п.1.3.5 настоящей части).
(11) Фраза END-REWRITE (КОНЕЦ-ОБНОВИТЬ) ограничивает область действия оператора REWRITE (ОБНОВИТЬ) (см. ч.4, п.6.4.3).
(12) Число позиций литер в записи, представленной именем-записи-1, должно быть не больше, чем наибольшее, и не меньше, чем наименьшее число позиций литер, определенное фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), относящейся к имени-файла, связанного с именем-записи-1. В обоих случаях выполнение оператора REWRITE (ОБНОВИТЬ) является неуспешным, обновление не происходит, содержимое области записи не изменяется, а состояние ввода-вывода файла, связанного с именем-записи-1, становится равным значению, указывающему на причину возникновения ситуации (см. п.1.3.4 настоящей части). |
(13) Для файла с произвольным
4.7. Оператор START (ПОДВЕСТИ) 4.7.1. Назначение Оператор START (ПОДВЕСТИ) предоставляет возможность логического позиционирования относительного файла для дальнейшего последовательного извлечения записей. 4.7.2. Общий формат |
4.7.3. Синтаксические правила (1) Имя-файла-1 должно быть именем файла с последовательным или динамическим доступом. (2) Имя-данного-1 может быть уточнено. (3) Если для имени-файла-1 не определена соответствующая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), должна быть указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА). (4) Имя-данного-1, если оно задано, должно относиться к данному, указанному во фразе RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) фразы ACCESS MODE (ДОСТУП) соответствующей статьи управления файлом. |
4.7.4. Общие правила (1) Файл, представленный именем-файла-1, ко времени выполнения оператора START (ПОДВЕСТИ) должен быть открыт для ввода или ввода-вывода (см. п.4.4 настоящей части). (2) Если фраза KEY (КЛЮЧ) не указана, подразумевается знак отношения EQUAU (РАВЕН). (3) Выполнение оператора START (ПОДВЕСТИ) не изменяет ни содержимое области записи, ни содержимое данного, представленного именем-данного, указанным во фразе DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы RECORD (В ЗАПИСИ), относящейся к имени файла-1. (4) Сравнение, определяемое знаком отношения во фразе KEY (КЛЮЧ), проводится между ключом записи файла, представленного именем-файла-1, и данным, как указано в общем правиле (10). Применяются правила числового сравнения (см. ч.6, п.6.3.1.1.1). |
а) Указатель позиции файла устанавливается на относительный номер записи первой логической записи файла, ключ которой удовлетворяет сравнению. б) Если сравнение не удовлетворяется ни для одной записи файла, возникает условие ошибки ключа, и выполнение оператора START (ПОДВЕСТИ) считается неуспешным. (5) При выполнении оператора START (ПОДВЕСТИ) обновляется значение состояния ввода-вывода, относящегося к имени-файла-1 (см. п.1.3.4 настоящей части). (6) Если во время выполнения оператора START (ПОДВЕСТИ) указатель позиции файла определяет, что необязательный входной файл отсутствует, возникает условие ошибки ключа, и выполнение оператора START (ПОДВЕСТИ) является неуспешным. (7) Передача управления после успешного или неуспешного выполнения оператора START (ПОДВЕСТИ) зависит от наличия или отсутствия необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) в операторе START (ПОДВЕСТИ) (см. п.1.3.5 настоящей части). (8) После неуспешного выполнения оператора START (ПОДВЕСТИ) указатель позиции файла указывает, что правильная следующая запись не установлена. (9) Фраза END-START (КОНЕЦ-ПОДВЕСТИ) ограничивает область действия оператора START (ПОДВЕСТИ) (см. ч.4, п.6.4.3). (10) Сравнение, описанное в общем правиле (4), использует данное, представленное фразой RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) фразы ACCESS MODE (ДОСТУП), относящейся к имени-файла-1. |
4.8. Оператор USE (ИСПОЛЬЗОВАТЬ)
4.8.1. Назначение
Оператор USE (ИСПОЛЬЗОВАТЬ) определяет процедуры обработки ошибок ввода-вывода дополнительно к стандартным процедурам, предоставляемым системой управления вводом-выводом.
4.8.2. Общий формат
4.8.3. Синтаксические правила
(1) Оператор USE (ИСПОЛЬЗОВАТЬ) должен непосредственно следовать за заголовком секции декларативной части раздела процедур и должен быть единственным в предложении. Остальная часть декларативной секции должна состоять из одного или более процедурных параграфов, определяющих процедуры, которые должны использоваться.
(2) Сам оператор USE (ИСПОЛЬЗОВАТЬ) никогда не выполняется; он только определяет условия, вызывающие выполнение указанных после него процедур.
(3) Появление имени-файла-1 в операторе USE (ИСПОЛЬЗОВАТЬ) не должно требовать одновременного выполнения более чем одной декларативной секции.
(4) Слова ERROR и EXCEPTION являются синонимами и взаимозаменяемы.
(5) Файлы, к которым явно или неявно обращаются в операторе USE (ИСПОЛЬЗОВАТЬ), могут иметь различную организацию или доступ.
(6) Каждая из фраз INPUT (ВХОДНЫХ), OUTPUT (ВЫХОДНЫХ), I-O (ВХОДНЫХ-ВЫХОДНЫХ)
4.8.4. Общие правила
(1) Декларативные процедуры могут быть включены в любую исходную Кобол-программу, независимо от того, содержит ли эта программа другую программу, или сама содержится в другой программе. Декларатива вызывается тогда, когда во время выполнения программы выполняются условия, описанные в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе. Только одна декларатива внутри отдельно скомпилированной программы, содержащей оператор, который вызвал уточняющее условие, вызывается тогда, когда выполняется какое-либо из условий, описанных в операторе USE (ИСПОЛЬЗОВАТЬ), предшествуют декларативе, во время выполнения программы. Если не существует уточняющей декларативы в отдельно скомпилированной программе, то декларатива не выполняется.
(2) Внутри декларативной процедуры не должно быть обращений к каким-либо процедурам в недекларативной части раздела процедур.
(3) К именам процедур, связанных с оператором USE (ИСПОЛЬЗОВАТЬ), могут быть обращения в другой декларативной секции, или в недекларативной процедуре только оператором PERFORM (ВЫПОЛНИТЬ).
(4) Когда имя-файла-1 описано явно, то к имени-файла-1 не применяется никаких других операторов USE (ИСПОЛЬЗОВАТЬ).
(5) Процедуры, связанные с оператором USE (ИСПОЛЬЗОВАТЬ), выполняются системой управления вводом-выводом после завершения стандартной программы ошибки ввода-вывода при неуспешном выполнении, если только не сработает фраза AT END (В КОНЦЕ) или INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА). При выполнении процедур соблюдаются следующие правила:
а) если указано имя-файла-1, то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ);
б) если указано INPUT (ВХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для ввода или в процессе открытия для ввода, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
в) если указано OUTPUT (ВЫХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для вывода или же в процессе открытия для вывода, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
г) если указано I-O (ВХОДНЫХ-ВЫХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для ввода-вывода или в процессе открытия для ввода-вывода, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
д) если указано EXTEND (ДОПОЛНЯЕМЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для дополнения или в процессе открытия для дополнения, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие. |
(6) После выполнения процедуры, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), управление передается вызывающей программе в системе управления вводом-выводом. Если значение состояния ввода-вывода не указывает на критическую ошибку ввода-вывода, то система управления вводом-выводом возвращает управление оператору, следующему за оператором ввода-вывода, выполнение которого вызвало ошибку. Если значение состояния ввода-вывода указывает на критическую ошибку, то действие определяется реализацией (см. п.1.3.4 настоящей части).
(7) В процедуре, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), не должны выполняться никакие операторы, которые могут потребовать выполнения процедуры, связанной с другим оператором USE (ИСПОЛЬЗОВАТЬ), вызванной ранее и еще не вернувшей управление вызвавшей ее программе.
4.9. Оператор WRITE (ПИСАТЬ)
4.9.1. Назначение
Оператор WRITE (ПИСАТЬ) включает логическую запись в выходной или входной-выходной файл.
4.9.2. Общий формат
4.9.3. Синтаксические правила
(1) Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.
(2) Имя-записи-1 является именем логической записи в секции файлов раздела данных и может быть уточнено.
(3) Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) должна указываться в операторе WRITE (ПИСАТЬ) для файлов, для которых не определена соответствующая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
4.9.4. Общие правила
(1) Файл, указанный именем-файла, связанным с именем-записи-1, должен быть открыт как OUTPUT (ВЫХОДНОЙ)
(3) Результат выполнения оператора WRITE (ПИСАТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентен выполнению следующих операторов в указанном порядке:
а) оператор
MOVE идентификатор-1 ТО имя-записи-1
ПОМЕСТИТЬ идентификатор-1 В имя-записи-1
соответственно правилам, специфицированным в операторе MOVE (ПОМЕСТИТЬ);
б) тот же оператор WRITE (ПИСАТЬ) без фразы FROM (ИЗ ПОЛЯ).
(4) После завершения выполнения оператора WRITE (ПИСАТЬ) информация в области, указанной идентификатором-1, остается доступной, даже если информация в области, указанной именем-записи-1, не является доступной, за исключением случая, определяемого фразой SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ).
(5) Выполнение оператора WRITE (ПИСАТЬ) не влияет на указатель позиции файла.
(6) Выполнение оператора WRITE (ПИСАТЬ) вызывает обновление состояния ввода-вывода имени-файла, связанного с именем-записи-1 (см. п.1.3.4 настоящей части).
(7) При выполнении оператора WRITE (ПИСАТЬ) логическая запись передается операционной системе.
(8) Количество позиций литер в записи, указанной именем-записи-1, не должно быть больше наибольшего или меньше наименьшего числа литер, допустимого фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), связанной с именем-файла, связанного с именем-записи-1. В любом случае выполнение оператора WRITE (ПИСАТЬ) неуспешно, операция записи не производится, содержимое области записи не меняется, и состояние ввода-вывода файла, связанного с именем-записи-1, принимает значение, указывающее на причину возникновения условия (см. п.1.3.4 настоящей части). |
(9) Если во время выполнения оператора WRITE (ПИСАТЬ) с фразой NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) не наступает условие ошибки ключа, то управление передается повелительному-оператору-2 следующим образом:
а) если выполнение оператора WRITE (ПИСАТЬ) успешно, то управление передается после того, как запись записана, и после изменения состояния ввода-вывода имени-файла, связанного с именем-записи-1;
б) если выполнение оператора WRITE (ПИСАТЬ) неуспешно не из-за ошибки ключа, то управление передается после обновления состояния ввода-вывода для имени-файла, связанного с именем-записи-1, и после выполнения процедуры, определенной оператором USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), применимой к имени-файла, связанного с именем-записи-1, если таковая указана.
(10) Фраза END-WRITE (КОНЕЦ-ПИСАТЬ) ограничивает область действия оператора WRITE (ПИСАТЬ) (см. ч.4, п.6.4.3).
(11) Если относительный файл открывается как выходной, записи могут быть помещены в файл одним из следующих способов:
а) если доступ последовательный, оператор WRITE (ПИСАТЬ) передает запись системе управления массовой памятью. Первая запись будет иметь относительный номер записи 1, а последующие включаемые записи будут иметь номера записей 2, 3, 4, .... Если фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) была указана для имени-файла, связанного с именем-записи-1, во время выполнения оператора WRITE (ПИСАТЬ) относительный номер переданной записи будет помещен СУМП в данное, определенное как относительный ключ, согласно правилам для оператора MOVE (ПОМЕСТИТЬ) (см. ч.6, п.6.1.9);
б) если доступ произвольный
(12) Если относительный файл открыт как дополняемый, записи включаются в этот файл. Первая запись, переданная системой управления массовой памятью, имеет относительный номер записи на единицу больший, чем наибольший относительный номер записи, существующей в файле. Следующие записи, переданные СУМП, имеют соответственно большие относительные номера записи. Если для файла, связанного с именем-записи-1, указана фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ), во время выполнения оператора WRITE (ПИСАТЬ) относительный номер включаемой записи помещается СУМП в данное, являющееся относительным ключом, согласно правилам для оператора MOVE (ПОМЕСТИТЬ) (см. ч.6, п.6.19). |
(13) Если файл открывается как входной-выходной и доступ произвольный
(14) Условие ошибки ключа возникает в следующих случаях:
а) когда при произвольном
б) когда сделана попытка писать запись вне границ, определенных для файла.
(15) При обнаружении условия ошибки ключа выполнение оператора WRITE (ПИСАТЬ) считается неуспешным. Содержимое области записи не изменяется, а состояние ввода-вывода имени файла, связанного с именем-записи-1, устанавливается на значение, указывающее причину этого условия. Выполнение программы продолжается в соответствии с правилами для условия ошибки ключа (см. пп.1.3.4, 1.3.5 настоящей части).
Часть 9. МОДУЛЬ ИНДЕКСНОГО ВВОДА-ВЫВОДА
1. ВВЕДЕНИЕ В МОДУЛЬ ИНДЕКСНОГО ВВОДА-ВЫВОДА
1.1. Назначение
Модуль индексного ввода-вывода обеспечивает возможность произвольного или последовательного доступа к записям файлов массовой памяти. Каждая запись индексного файла однозначно идентифицируется значением одного или более ключей внутри записи.
1.2. Характеристика уровней
Уровень 1 индексного ввода-вывода обеспечивает неполные возможности для статьи управления файлом, статьи описания файла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 1 индексного ввода-вывода обеспечивает ограниченные возможности операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), USE (ИСПОЛЬЗОВАТЬ) и WRITE (ПИСАТЬ) и полные возможности оператора DELETE (УДАЛИТЬ).
Уровень 2 индексного ввода-вывода обеспечивает полные возможности для статьи управления файлом, статьи описания файла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 2 индексного ввода-вывода обеспечивает полные возможности операторов CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), START (ПОДВЕСТИ), USE (ИСПОЛЬЗОВАТЬ) и WRITE (ПИСАТЬ). |
1.3. Понятия языка
1.3.1. Организация
Файл с индексной организацией - это файл массовой памяти, доступ к записям которого может осуществляться с помощью указанного в записи ключа.
Для каждого данного, являющегося ключом, определенным для записей файла, поддерживается индекс. Каждый индекс представляет собой множество значений соответствующего ключевого данного в каждой записи. Каждый индекс, следовательно, является механизмом, обеспечивающим доступ к любой записи файла.
Каждый индексный файл имеет основной индекс, представляющий основной ключ каждой записи файла. Каждая запись включается в файл, изменяется или удаляется из файла в зависимости от значения основного ключа записи. Каждый основной ключ записи должен быть уникальным и неизменяемым при изменении записи.
Основной ключ записи описывается во фразе RECORD KEY (КЛЮЧ ЗАПИСИ) статьи управления файлом для данного файла.
Дополнительные ключи записи обеспечивают дополнительные средства доступа к записям файла. Эти ключи именуются во фразе ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) статьи управления файлом. Значение дополнительного ключа записи может дублироваться. Когда эти значения не уникальны, во фразе ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) указывается фраза DUPLICATES (С ДУБЛИРОВАНИЕМ). |
1.3.2. Методы доступа
При произвольном доступе к файлу операторы ввода-вывода применяются для доступа к записям в порядке, указанном программистом.
При индексной организации программист указывает требуемую запись, помещая значение одного из ее ключей записи в данное, представляющее ключ записи или дополнительный ключ записи.
При динамическом доступе программист может произвольно переходить от последовательного доступа к произвольному и наоборот, применяя соответствующие формы операторов ввода-вывода. |
1.3.3. Указатель позиции файла
Указатель позиции файла - это логическое понятие, используемое в этом документе для облегчения точной спецификации следующей записи, к которой должен осуществляться доступ при выполнении заданной последовательности операций ввода-вывода. На установку указателя позиции файла влияют только операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ)
1.3.4. Состояние ввода-вывода
Состояние ввода-вывода - это логическое понятие, характеризующееся двухсимвольным значением, которое устанавливается для указания состояния операции ввода-вывода во время выполнения операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ),
Состояние ввода-вывода определяет также, будет ли выполняться процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Если возникает любое условие, отличное от тех, которые определены ниже как "успешное завершение", может выполняться указанная процедура по правилам, заданным для оператора USE (ИСПОЛЬЗОВАТЬ). Если возникает одно из условий "успешное завершение", никакая процедура такого типа не будет выполняться (п.4.8 настоящей части).
Некоторые классы значений состояния ввода-вывода задают критические условия ошибки. К таким значениям относятся значения, которые начинаются с цифры 3 или 4, а также значения, начинающиеся с цифры 9, которые определяются как критические реализацией. Если значение состояния ввода-вывода для операции ввода-вывода задает такое условие ошибки, реализацией определяются действия, которые предпринимаются после выполнения применимой процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), или, если ни одна такая процедура не применима, после завершения стандартной системной процедуры обработки, ошибок ввода-вывода.
Состояние ввода-вывода задает одно из следующих условий, возникающих после завершения операции ввода-вывода:
(1) Успешное завершение. Оператор ввода-вывода выполнился успешно;
(2) В конце. Оператор последовательного чтения был выполнен неуспешно из-за того, что возникло условие конца файла;
(3) Ошибка ключа. Оператор ввода-вывода выполнен неуспешно из-за того, что возникло условие ошибки ключа;
(4) Постоянная ошибка. Оператор ввода-вывода выполнен неуспешно в результате ошибки, которая исключает дальнейшую обработку файла. Выполняются все заданные процедуры обработки ошибочных ситуаций. Условие постоянной ошибки остается действующим на все последующие операции ввода-вывода файла до тех пор, пока не будут вызваны определенные реализацией средства для устранения условия постоянной ошибки;
(5) Логическая ошибка. Оператор ввода-вывода выполнен неуспешно из-за недопустимой последовательности операций ввода-вывода, выполняемых над файлом, или в результате нарушения ограничений, заданных пользователем;
(6) Ошибка, определяемая реализацией. Оператор ввода-вывода выполнен неуспешно в результате возникновения условия, определенного реализацией.
Ниже приводится список значений, помещаемых в состояние ввода-вывода для перечисленных выше условий, возникающих в результате выполнения операций ввода-вывода для индексного файла. Если применимо более одного значения, значение, которое помещается в состояние ввода-вывода, определяется реализацией.
(1) Успешное завершение
а) Состояние ввода-вывода=00. Оператор ввода-вывода выполнился успешно и нет никакой другой доступной информации об операции ввода-вывода.
б) Состояние ввода-вывода=02. Оператор ввода-вывода успешно выполнился, но обнаружено дублирование ключа.
1) Для оператора READ (ЧИТАТЬ) значение ключа для текущего ключа ссылки равно значению такого же ключа в следующей записи в текущем ключе ссылки.
2) Для оператора REWRITE (ОБНОВИТЬ) или WRITE (ПИСАТЬ) только что записанная запись создает дублирующееся значение ключа хотя бы для одного дополнительного ключа записи, для которого дублирование разрешено. |
в) Состояние ввода-вывода=04. Оператор READ (ЧИТАТЬ) выполнился успешно, но длина обрабатываемой записи не соответствует фиксированным свойствам этого файла.
г) Состояние ввода-вывода=05. Оператор OPEN (ОТКРЫТЬ) успешно выполнился, но указанный в нем необязательный файл во время выполнения оператора OPEN (ОТКРЫТЬ) отсутствует. Если режим открытия для ввода-вывода или дополнения, файл будет создаваться. |
(2) Условие "в конце" с неуспешным завершением
а) Состояние ввода-вывода=10. Делается попытка выполнить последовательный оператор READ (ЧИТАТЬ), а в файле не существует следующей логической записи из-за того, что:
1) достигнут конец файла;
2) делается попытка выполнить последовательный оператор READ (ЧИТАТЬ) в первый раз для отсутствующего необязательного входного файла. |
(3) Условие ошибки ключа при неуспешном завершении
а) Состояние ввода-вывода=21. Ошибка в последовательности при последовательном доступе к индексному файлу. Нарушено требование возрастающей последовательности значений ключа записи или значение основного ключа записи изменилось между успешным выполнением оператора READ (ЧИТАТЬ) и выполнением следующего оператора REWRITE (ОБНОВИТЬ) для этого файла (п.4.9 настоящей части).
в) Состояние ввода-вывода=23. Это условие возникает, если:
1) сделана попытка произвольного доступа к записи, которой нет в файле; или
2) сделана попытка выполнить оператор START (ПОДВЕСТИ) или READ (ЧИТАТЬ) с произвольным доступом для необязательного входного файла, который отсутствует. |
г) Состояние ввода-вывода=24. Сделана попытка занесения записей в индексный файл вне его границ, определенных внешним образом. Способ определения границ указывается реализацией.
(4) Условие постоянной ошибки с неуспешным завершением
а) Состояние ввода-вывода=30. Возникла постоянная ошибка и нет никакой другой доступной информации об операции ввода-вывода.
б) Состояние ввода-вывода=35. Постоянная ошибка возникла из-за того, что делается попытка выполнить оператор OPEN (ОТКРЫТЬ) с фразой INPUT (ВХОДНОЙ), I-O (ВХОДНОЙ-ВЫХОДНОЙ)
в) Состояние ввода-вывода=37. Постоянная ошибка возникла из-за того, что оператор OPEN (ОТКРЫТЬ) выдан для файла, который не поддерживает режим открытия, заданный в операторе OPEN (ОТКРЫТЬ). Возможны следующие нарушения:
1) задана фраза
2) задана фраза I-O (ВХОДНОЙ-ВЫХОДНОЙ), а файл не допускает операции ввода и вывода, которые разрешены для индексного файла, открываемого в режиме ввода-вывода;
3) задана фраза INPUT (ВХОДНОЙ), а файл не допускает операции чтения.
г) Состояние ввода-вывода=38. Постоянная ошибка возникла из-за того, что выдан оператор OPEN (ОТКРЫТЬ) для файла, ранее закрытого с замком. |
д) Состояние ввода-вывода=39. Оператор OPEN (ОТКРЫТЬ) завершился неуспешно из-за обнаруженного для этого файла несоответствия фиксированных свойств файла и свойств, заданных в программе.
(5) Условие логической ошибки с неуспешным завершением
а) Состояние ввода-вывода=41. Оператор OPEN (ОТКРЫТЬ) выдан для открытого файла.
б) Состояние ввода-вывода=42. Оператор CLOSE (ЗАКРЫТЬ) выдан для неоткрытого файла.
в) Состояние ввода-вывода=43. При последовательном доступе последний оператор ввода-вывода, выполненный для файла до выполнения оператора DELETE (УДАЛИТЬ) или REWRITE (ОБНОВИТЬ), не является успешно выполненным оператором READ (ЧИТАТЬ).
г) Состояние ввода-вывода=44. Нарушение границ возникает по следующим причинам:
1) совершена попытка записать или обновить запись, которая длиннее максимально допустимой или короче минимально допустимой в соответствии с фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО), связанной с именем файла; |
2) на уровне 1 сделана попытка обновить запись индексного файла, а размер заменяющей записи отличен от размера заменяемой записи.
д) Состояние ввода-вывода=46. Выдан оператор последовательного чтения для файла, открытого в режиме ввода или ввода-вывода и не была установлена правильная следующая запись по одной из следующих причин:
1) предыдущий оператор START (ПОДВЕСТИ) закончился неуспешно, или |
2) предыдущий оператор READ (ЧИТАТЬ) закончился неуспешно, но не вызвал условие "в конце";
3) предыдущий оператор READ (ЧИТАТЬ) вызвал условие "в конце".
е) Состояние ввода-вывода=47. Был выдан оператор READ (ЧИТАТЬ)
ж) Состояние ввода-вывода=48. Был выдан оператор WRITE (ПИСАТЬ) для файла, не открытого в режиме ввода-вывода, вывода
з) Состояние ввода-вывода=49. Был выдан оператор DELETE (УДАЛИТЬ) или REWRITE (ОБНОВИТЬ) для файла, не открытого в режиме ввода-вывода.
(6) Определяемое реализацией условие с неуспешным завершением
а) Состояние ввода-вывода=9х. Существуют определяемые реализацией условия. Эти условия не должны дублировать никакие условия, определенные для значений от 00 до 49 состояния ввода-вывода. Значение х определяется реализацией.
1.3.5. Условие ошибки ключа
Условие ошибки ключа может возникнуть в результате выполнения операторов DELETE (УДАЛИТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ)
Если условие ошибки ключа возникает после выполнения операции ввода-вывода, определенной в операторе ввода-вывода, то происходят следующие действия в указанном порядке:
(1) состояние ввода-вывода определителя файла, связанного с оператором, устанавливается в значение, определяющее условие ошибки ключа (см. п.1.3.4 настоящей части);
(2) если в операторе ввода-вывода указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), то никакая процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), связанная с определителем файла, не выполняется, и управление передается повелительному оператору, указанному во фразе INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА). Выполнение продолжается в соответствии с правилами для каждого оператора, указанного в этом повелительном операторе. Если выполняется оператор ветвления процедуры или условный оператор, который вызывает явную передачу управления, то управление передается в соответствии с правилами для этого оператора; в противном случае после завершения выполнения повелительного оператора, указанного во фразе INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), управление передается в конец оператора ввода-вывода, а фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), если она указана, игнорируется;
(3) если в операторе ввода-вывода фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) не указана, то с определителем файла должна быть связана процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), и эта процедура выполняется, а управление передается в соответствии с правилами оператора USE (ИСПОЛЬЗОВАТЬ). Если указана фраза NOT NIVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), то она игнорируется (п.4.8 настоящей части).
Если после выполнения операции ввода-вывода, указанной в операторе ввода-вывода, условия ошибки ключа нет, то фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), если она указана, игнорируется. Состояние ввода-вывода определителя файла, связанного с оператором, обновляется, и выполняются следующие действия:
(1) если возникает условие ошибки, которое не является условием ошибки ключа, то управление передается в соответствии с правилами оператора USE (ИСПОЛЬЗОВАТЬ), а затем выполняется процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), связанная с определителем файла (п.4.8 настоящей части);
(2) если условие ошибки не возникает, то управление передается в конец оператора ввода-вывода или повелительному оператору, указанному во фразе NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА). В последнем случае выполнение продолжается в соответствии с правилами для каждого оператора, указанного в повелительном операторе. Если это оператор ветвления процедуры или условный оператор, который вызывает явную передачу управления, то управление передается в соответствии с правилами для этого оператора; в противном случае, после завершения выполнения повелительного оператора, указанного во фразе NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), управление передается в конец оператора ввода-вывода.
1.3.6. Условие "в конце"
Условие "в конце" может возникнуть в результате выполнения оператора READ (ЧИТАТЬ) (п.4.5 настоящей части).
1.3.7. Условие противоречия свойств файла
Условие противоречия свойств файла может возникнуть в результате выполнения операторов OPEN (ОТКРЫТЬ), REWRITE (ОБНОВИТЬ) или WRITE (ПИСАТЬ). При возникновении условия противоречия свойств файла выполнение оператора ввода-вывода, который обнаружил это условие, считается неуспешным и файл не изменяется (пп.4.4, 4.6, 4.9 настоящей части).
При обнаружении условия противоречия свойств файла выполняются следующие действия в указанном ниже порядке:
(1) в состояние ввода-вывода, связанное с именем-файла, помещается значение, указывающее на условие противоречия свойств файла (см. п.1.3.4 настоящей части);
(2) если для данного имени файла задана процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), выполняется указанная процедура.
2. РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ ИНДЕКСНОГО ВВОДА-ВЫВОДА
2.1. Секция ввода-вывода
Информация, относящаяся к секции ввода-вывода, находится в ч.7, п.2.1.
2.2. Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ)
Информация о параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) находится в ч.7, п.2.2.
2.3. Статья управления файлом
2.3.1. Назначение
Статья управления файлом объявляет существенные физические свойства индексного файла.
2.3.2. Общий формат
2.3.3. Синтаксические правила
(1) В статье управление файлом фраза SELECT (ДЛЯ) должна указываться первой. Фразы, которые следуют за фразой SELECT (ДЛЯ), могут появляться в любом порядке.
(2) Каждое имя-файла из раздела данных должно быть определено в параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) только один раз. Каждое имя-файла, указанное в фразе SELECT (ДЛЯ), должно иметь статью описания файла в разделе данных той же самой программы.
(3) Литерал-1 должен быть нечисловым литералом и не должен быть стандартной константой. Значение и правила для допустимого содержимого имени-реализации-1 и значения литерала-1 определяются реализацией.
2.3.4. Общие правила
(1) Если определитель файла, на который ссылается имя-файла-1, является внешним определителем файла (ч.10, п.4.5), все статьи управления файлом в единице исполнения, которые ссылаются на этот определитель файла, должны иметь:
а) одну и ту же спецификацию фразы OPTIONAL (НЕОБЯЗАТЕЛЬНОГО); |
б) корректную спецификацию для имени-реализации-1 или литерала-1 во фразе ASSIGN (НАЗНАЧИТЬ). Правила корректности имени-реализации-1 и литерала-1 определяются реализацией;
в) одно и то же значение целого-1 во фразе RESERVE (РЕЗЕРВИРОВАТЬ); |
г) одну и ту же организацию;
д) один и тот же метод доступа.
е) ту же статью описания данных для имени-данного-1 с тем же относительным размещением в соответствующей записи;
ж) ту же статью описания данных для имени-данного-2, то же относительное размещение в соответствующей записи, то же число дополнительных ключей записи и ту же фразу DUPLICATES (С ДУБЛИРОВАНИЕМ).
(2) Для данных внешней среды принимается внутренний набор литер.
(3) Для индексного файла предполагается программный алфавит, связанный с внутренним набором литер. Он определяет последовательность значений заданного ключа ссылки, используемого для последовательной обработки файла.
(4) Фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) применима только к файлам, открытым в режиме ввода, ввода-вывода или дополнения. Ее указание требуется для файлов, которые могут отсутствовать во время выполнения объектной программы. |
(5) Фраза ASSIGN (НАЗНАЧИТЬ) задает связь между файлом, на который ссылается имя-файла-1, и запоминающей средой, на которую ссылается имя-реализации-1 или литерал-1.
(6) Фраза RESERVE (РЕЗЕРВИРОВАТЬ) для модуля индексного ввода-вывода та же, что и для модуля последовательного ввода-вывода. Описание фразы RESERVE (РЕЗЕРВИРОВАТЬ) находится в ч.7, п.2.9). |
(7) Фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА) для модуля индексного ввода-вывода та же, что и для модуля последовательного ввода-вывода. Описание фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) находится в ч.7, п.2.5. Содержимое данного, связанного с фразой FILE STATUS (СОСТОЯНИЕ ФАЙЛА) индексного файла, определяется в п.1.3.4 настоящей части.
(8) Далее представлены фразы ACCESS MODE (ДОСТУП),
2.4. Фраза ACCESS MODE (ДОСТУП)
2.4.1. Назначение
Фраза ACCESS MODE (ДОСТУП) задает порядок, в котором осуществляется доступ к записям в файле.
2.4.2. Общий формат
2.4.3. Синтаксические правила
(1) Фраза ACCESS MODE IS RANDOM (ДОСТУП ПРОИЗВОЛЬНЫЙ) не должна употребляться для имен-файлов, указанных во фразах USING (ИСПОЛЬЗУЯ) или GIVING (ПОЛУЧАЯ) операторов SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ).
2.4.4. Общие правила
(1) Если фраза ACCESS MODE (ДОСТУП) не задана, предполагается последовательный доступ.
(2) Если доступ последовательный, записи становятся доступными в последовательности, диктуемой организацией файла. Для индексного файла эта последовательность является возрастающей по заданному ключу ссылки соответственно алфавитной упорядоченности файла.
(3) Если доступ произвольный, значение ключа записи для индексного файла указывает требуемую запись.
(4) Если доступ динамический, доступ к записям файла может быть последовательным и (или) произвольным. |
(5) Если соответствующий определитель файла является внешним определителем файла, то каждая статья управления файлом в единице исполнения, связанная с этим определителем файла, должна указывать один и тот же метод доступа.
2.5. Фраза ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) 2.5.1. Назначение Фраза ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) указывает путь доступа к записям индексного файла по дополнительному ключу записи. 2.5.2. Общий формат |
2.5.3. Синтаксические правила (1) Имя-данного-1 может уточняться. (2) Имя-данного-1 должно определяться как буквенно-цифровое данное в статье описание записи, соответствующей имени-файла, которой подчинена фраза ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ). (3) Имя-данного-1 не должно относиться к групповому данному, содержащему переменно повторяющееся данное. |
(4) Имя-данного-1 не должно относиться к данному, самая левая позиция литеры которого соответствует самой левой позиции литеры основного ключа записи или других дополнительных ключей записи, связанных с этим файлом. (5) Если индексный файл содержит записи переменной длины, каждый дополнительный ключ записи должен содержаться в первых х позициях литер записи, где х равно минимальному размеру записи, определенному для файла (см. ч.7, п.3.8), 2.5.4. Общие правила (1) Фраза ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) указывает дополнительный ключ записи для файла, к которому относится эта фраза. (2) Описания данных имя-данного-1, а также их относительное размещение внутри записи должны быть такими же, как и при создании файла. Число дополнительных ключей для файла должно быть таким же, как и при создании файла. (3) Фраза WITH DUPLICATES (С ДУБЛИРОВАНИЕМ) указывает, что значение дополнительного ключа записи может дублироваться в некоторых записях файла. Если фраза WITH DUPLICATES (С ДУБЛИРОВАНИЕМ) не указана, значение дополнительного ключа записи не может дублироваться в записях файла. (4) Если файл имеет несколько статей описания записи, достаточно описать имя-данного-1 в одной из этих статей описания записи. На идентичные позиции литер, представленные именем-данного-1 в какой-либо статье описания записи, неявно ссылаются ключи для остальных статей описания записи этого файла. (5) Если соответствующий определитель файла является внешним определителем файла, каждая статья управления файлом в единице исполнения, соответствующая этому определителю файла, должна определять ту же статью описания данных для имени-данного-1, то же относительное размещение внутри соответствующей записи, то же количество дополнительных ключей записи и ту же фразу WITH DUPLICATES (С ДУБЛИРОВАНИЕМ). |
2.6. Фраза ORGANIZATION IS INDEXED (ОРГАНИЗАЦИЯ ИНДЕКСНАЯ)
2.6.1. Назначение
Фраза ORGANIZATION IS INDEXED (ОРГАНИЗАЦИЯ ИНДЕКСНАЯ) указывает, что логической структурой файла является индексная организация.
2.6.2. Общий формат
2.6.3. Общие правила
(1) Фраза ORGANIZATION IS INDEXED (ОРГАНИЗАЦИЯ ИНДЕКСНАЯ) указывает, что логической структурой файла является индексная организация. Организация файла устанавливается во время создания файла и не может быть изменена в дальнейшем.
(2) Индексная организация это постоянная логическая структура файла, в которой каждая запись идентифицируется значением одного или более ключей в этой записи.
2.7. Фраза RECORD KEY (КЛЮЧ ЗАПИСИ)
2.7.1. Назначение
Фраза RECORD KEY (КЛЮЧ ЗАПИСИ) указывает путь доступа по основному ключу записи к записям в индексном файле.
2.7.2. Общий формат
RECORD KEY IS имя-данного-1
КЛЮЧ ЗАПИСИ имя-данного-1
2.7.3. Синтаксические правила
(1) Имя-данного-1 может уточняться.
(2) Имя-данного-1 должно ссылаться на данное буквенно-цифровой категории в статье описания записи, связанной с именем-файла, которому подчинена фраза RECORD KEY (КЛЮЧ ЗАПИСИ).
(3) Имя-данного-1 не должно относиться к групповому данному, содержащему переменно повторяющееся данное.
(4) Если индексный файл содержит записи переменной длины, основной ключ записи должен содержаться в первых х позициях литеры записи, где х равняется минимальному размеру записи, указанному для файла (см. ч.7, п.3.8). |
2.7.4. Общие правила
(1) Фраза RECORD KEY (КЛЮЧ ЗАПИСИ) указывает основной ключ записи для файла, к которому относится фраза. Значения основного ключа записи должны быть уникальными в записях файла.
(2) Описание данного, соотнесенного имени-данного-1, так же как и его относительное местонахождение в записи, должно быть таким же, какое использовалось при создании файла.
(3) Если для файла имеется более одной статьи описания записи, имя-данного-1 может быть только в одной из этих статей описания записи. Идентичные позиции литер, соотнесенные имени-данного-1, в любой другой статье описания записи неявно считаются ключами для всех остальных статей описания записи этого файла.
(4) Если соответствующий файлу определитель файла является внешним определителем, все статьи описания файла в единице исполнения, связанные с этим определителем файла, должны указывать одну и ту же статью описания данного для имени-данного-1 с одним и тем же относительным местоположением в соответствующей записи.
2.8. Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ)
2.8.1. Назначение
Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) указывает контрольные точки для перепрогона, а также общие области памяти, которые могут совместно использоваться различными файлами. Фраза RERUN (ПЕРЕПРОГОН) параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) рассматривается в настоящем стандарте как устаревший элемент и будет удалена в следующей редакции стандарта.
2.8.2. Общий формат
2.8.3. Общие правила
(1) Фраза RERUN (ПЕРЕПРОГОН) для модуля индексного ввода-вывода является подмножеством фразы RERUN (ПЕРЕПРОГОН) для модуля последовательного ввода-вывода. Поэтому спецификации фразы RERUN (ПЕРЕПРОГОН) см. ч.7, п.2.12.
(2) Фраза SAME (ОБЩАЯ ОБЛАСТЬ) для модуля индексного ввода-вывода такая же, как и фраза SAME (ОБЩАЯ ОБЛАСТЬ) для модуля последовательного ввода-вывода. Поэтому соответствующие спецификации см. ч.7, п.2.13.
3. РАЗДЕЛ ДАННЫХ В МОДУЛЕ ИНДЕКСНОГО ВВОДА-ВЫВОДА
3.1. Секция файлов
Информацию о секции файлов см. в ч.7, п.3.1.
3.2. Статья описания файла
3.2.1. Назначение
Статья описания файла содержит применимую к индексному файлу информацию о физической структуре, идентификации и именах записей.
3.2.2. Общий формат
3.2.3. Синтаксические правила
(1) Индикатор уровня FD (ОФ) идентифицирует начало статьи описания файла и должен предшествовать имени-файла-1.
(2) Фразы, которые следуют за именем-файла-1, могут задаваться в любом порядке.
(3) Одна или несколько статей описания записи должны следовать за статьей описания файла.
3.2.4. Общие правила
(1) Статья описания файла связывает имя-файла-1 с определителем файла.
(2) Фраза BLOCK CONTAINS (В БЛОКЕ) для модуля индексного ввода-вывода такая же, как и фраза BLOCK CONTAINS (В БЛОКЕ) для модуля последовательного ввода-вывода. Поэтому спецификации фразы BLOCK CONTAINS (В БЛОКЕ) см. ч.7, п.3.3.
(3) Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) для модуля индексного ввода-вывода такая же, как и для модуля последовательного ввода-вывода. Описание фразы DATA RECORDS (ЗАПИСИ ДАННЫХ) находится в ч.7, п.3.5. Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) рассматривается в настоящем стандарте как устаревший элемент и будет удалена в следующей редакции стандарта.
(4) Фраза LABEL RECORDS (МЕТКИ) для модуля индексного ввода-вывода такая же, как и для модуля последовательного ввода-вывода. Описание фразы LABEL RECORDS (МЕТКИ) находится в ч.7, п.3.6. Фраза LABEL RECORDS (МЕТКИ) рассматривается в настоящем стандарте как устаревший элемент языка и будет удалена в следующей редакции стандарта.
(5) Фраза RECORD (В ЗАПИСИ) для модуля индексного ввода-вывода такая же, как и для модуля последовательного ввода-вывода. Описание фразы RECORD (В ЗАПИСИ) находится в ч.7, п.3.8.
(6) Фраза VALUE OF (ЗНАЧЕНИЕ) для модуля индексного ввода-вывода такая же, как и для модуля последовательного ввода-вывода. Описание фразы VALUE OF (ЗНАЧЕНИЕ) находится в ч.7, п.3.9. Фраза VALUE OF (ЗНАЧЕНИЕ) рассматривается в настоящем стандарте как устаревший элемент языка и будет удалена в следующей редакции стандарта.
4. РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ ИНДЕКСНОГО ВВОДА-ВЫВОДА
4.1. Общее описание
Если в исходной Кобол-программе имеется оператор USE (ИСПОЛЬЗОВАТЬ) модуля индексного ввода-вывода, раздел процедур содержит декларативные процедуры. Ниже приводится общий формат раздела процедур для случая, когда оператор USE (ИСПОЛЬЗОВАТЬ) указан.
4.2. Оператор CLOSE (ЗАКРЫТЬ)
4.2.1. Назначение
Оператор CLOSE (ЗАКРЫТЬ) завершает обработку файла, возможно с замком.
4.2.2. Общий формат
4.2.3. Синтаксическое правило
Файлы, перечисленные в операторе CLOSE (ЗАКРЫТЬ), могут иметь различную организацию и доступ.
4.2.4. Общие правила
(1) Оператор CLOSE (ЗАКРЫТЬ) может быть использован только для файла, который был открыт.
(2) Индексные файлы классифицируются как принадлежащие к категории непоследовательных однотомных или многотомных файлов. Результаты выполнения оператора CLOSE (ЗАКРЫТЬ) для этой категории файлов приведены ниже.
Формат оператора CLOSE (ЗАКРЫТЬ) | Категория файла |
Непоследовательный однотомный (многотомный) файл | |
CLOSE (ЗАКРЫТЬ) | А |
CLOSE WITH LOCK (ЗАКРЫТЬ С ЗАМКОМ) | А, Б |
Определения символов А и Б следуют далее.
Там, где эти определения зависят от того, как открыт файл - как входной, выходной или входной-выходной, приводятся дополнительные пояснения; в противном случае эти определения относятся к файлам, открытым как входные, выходные или входные-выходные.
А - закрыть файл.
Входные и входные-выходные файлы (доступ последовательный).
Если файл установлен в конце и указаны записи меток для этого файла, метки обрабатываются в соответствии со стандартной процедурой обработки меток, определенной реализацией. Действия оператора CLOSE (ЗАКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют, или когда записи меток не специфицированы, но присутствуют. Выполняются операции закрытия, определенные реализацией. Если файл установлен в конце и записи меток для него не специфицированы, метки не обрабатываются, но другие операции закрытия, определенные peализацией, выполняются. Если файл установлен не в конце, операции закрытия, определенные реализацией, выполняются, но конечные метки не обрабатываются.
Если записи меток для файла специфицированы, метки обрабатываются в соответствии со стандартной процедурой обработки меток, определенной реализацией. Действия оператора CLOSE (ЗАКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют или когда они не специфицированы, но присутствуют. Выполняются операции закрытия, определенные реализацией. Если записи меток для файла не указаны, метки не обрабатываются, но другие операции закрытия, определенные реализацией, выполняются.
Б - закрыть с замком. Файл закрыт и не может быть опять открыт во время выполнения этой единицы исполнения. |
(3) Выполнение оператора CLOSE (ЗАКРЫТЬ) приводит к изменению значения состояния ввода-вывода, относящегося к имени-файла-1 (см. п.1.3.4 настоящей части).
(4) Если не присутствует необязательный входной файл, для файла не производится обработка конца файла, и указатель позиции файла не меняется. |
(5) После успешного завершения оператора CLOSE (ЗАКРЫТЬ) область записи, связанная с именем-файла, становится недоступной. В случае неуспешного выполнения оператора CLOSE (ЗАКРЫТЬ) доступность области записи является неопределенной.
(6) После успешного завершения оператора CLOSE (ЗАКРЫТЬ) файл перестает быть открытым, он больше не связан ни с каким определителем файла.
(7) Если в операторе CLOSE (ЗАКРЫТЬ) указаны несколько имен-файлов, результат выполнения этого оператора CLOSE (ЗАКРЫТЬ) такой же, как если бы отдельный оператор CLOSE (ЗАКРЫТЬ) был написан для каждого имени файла в том порядке, как они указаны в этом операторе CLOSE (ЗАКРЫТЬ).
4.3. Оператор DELETE (УДАЛИТЬ)
4.3.1. Назначение
Оператор DELETE (УДАЛИТЬ) логически удаляет запись из файла массовой памяти.
4.3.2. Общий формат
DELETE имя-файла-1 RECORD | ||
[INVALID KEY повелительный-оператор-1] | ||
[NOT INVALID KEY повелительный-оператор-2] | ||
[END-DELETE] | ||
УДАЛИТЬ ЗАПИСЬ имя-файла-1 | ||
[ПРИ ОШИБКЕ КЛЮЧА повелительный-оператор-1] | ||
[БЕЗ ОШИБКИ КЛЮЧА повелительный-оператор-2] | ||
[КОНЕЦ-УДАЛИТЬ] |
4.3.3. Синтаксические правила
(1) Фразы INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) не должны указываться для оператора DELETE (УДАЛИТЬ), который ссылается на файл с последовательным доступом.
(2) Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) должна быть указана в операторе DELETE (УДАЛИТЬ), который ссылается на файл не с последовательным доступом и для которого не определена процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
4.3.4. Общие правила
(1) Файл, представленный именем-файла-1, должен быть файлом массовой памяти. Он должен быть открыт в режиме ввода-вывода ко времени выполнения этого оператора (п.4.4 настоящей части).
(2) Для файлов с последовательным доступом последним оператором ввода-вывода, выполняемым для имени-файла-1 перед выполнением оператора DELETE (УДАЛИТЬ), должен быть успешно выполненный оператор READ (ЧИТАТЬ). Система управления массовой памятью логически удаляет из файла запись, которая была извлечена по оператору READ (ЧИТАТЬ).
(3) Для индексного файла с произвольным
(4) После успешного выполнения оператора DELETE (УДАЛИТЬ) идентифицированная запись логически удаляется из файла и становится недоступной.
(6) Выполнение оператора DELETE (УДАЛИТЬ) не влияет на указатель позиции файла.
(7) При выполнении оператора DELETE (УДАЛИТЬ) обновляется значение состояния ввода-вывода, связанного с именем-файла-1 (см. п.1.3.4 настоящей части).
(8) Передача управления после успешного или неуспешного выполнения оператора DELETE (УДАЛИТЬ) зависит от наличия или отсутствия в операторе DELETE (УДАЛИТЬ) необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) (см. п.1.3.5 настоящей части).
(9) Фраза END-DELETE (КОНЕЦ-УДАЛИТЬ) ограничивает область действия оператора DELETE (УДАЛИТЬ) (см. ч.4, п.6.4.3).
4.4. Оператор OPEN (ОТКРЫТЬ)
4.4.1. Назначение
Оператор OPEN (ОТКРЫТЬ) подготавливает файл к обработке.
4.4.1*. Общий формат
________________
* Нумерация соответствует оригиналу. - .
4.4.3. Синтаксические правила
(1) Фраза EXTEND (ДОПОЛНЯЕМЫЙ) должна использоваться только для файлов с последовательным доступом. |
(2) Файлы, перечисленные в операторе OPEN (ОТКРЫТЬ), могут иметь различную организацию и доступ.
4.4.4. Общие правила
(1) Успешное выполнение оператора OPEN (ОТКРЫТЬ) делает файл доступным для обработки и файл находится в режиме открытия. Успешное выполнение оператора OPEN (ОТКРЫТЬ) связывает файл с именем-файла посредством определителя файла.
Файл доступен, если он физически имеется в наличии и распознан системой управления вводом-выводом.
В табл.1 показаны результаты открытия доступных и недоступных файлов.
Таблица 1
Фраза оператора | Файл доступен | Файл недоступен |
INPUT (ВХОДНОЙ) | Нормальное открытие | Открытие неуспешное |
INPUT (ВХОДНОЙ) (необязательный файл) | Нормальное открытие | Нормальное открытие; при первом чтении возникает условие конца или условие ошибки ключа |
I-O (ВХОДНОЙ-ВЫХОДНОЙ) | Нормальное открытие | Открытие неуспешное |
I-O (ВХОДНОЙ-ВЫХОДНОЙ) (необязательный файл) | Нормальное открытие | Открытие приводит к созданию файла |
OUTPUT (ВЫХОДНОЙ) | Нормальное открытие; файл не содержит записей | Открытие приводит к созданию файла |
EXTEND (ДОПОЛНЯЕМЫЙ) | Нормальное открытие | Открытие неуспешное |
EXTEND (ДОПОЛНЯЕМЫЙ) (необязательный файл) | Нормальное открытие | Открытие приводит к созданию файла |
(2) Успешное выполнение оператора OPEN (ОТКРЫТЬ) делает область записи доступной программе. Если определитель файла, связанный с именем файла, является внешним, то существует единственная область записи, связанная с определителем файла для единицы исполнения.
(1) Если файл не открыт, не может быть выполнен ни один оператор, явно или неявно относящийся к файлу, за исключением оператора MERGE (СЛИТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ), оператора OPEN (ОТКРЫТЬ) или оператора SORT (СОРТИРОВАТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ).
(4) Оператор OPEN (ОТКРЫТЬ) должен быть успешно выполнен перед выполнением любого другого допустимого оператора ввода-вывода. В табл.2 "х" означает, что указанный оператор, используемый при указанном в строке методе доступа, может использоваться в режиме открытия, заданном в заголовке столбца.
Таблица 2
Метод доступа файла | Оператор | режим открытия | |||
для ввода | для вывода | для ввода-вывода | для дополнения | ||
Последовательный | READ (ЧИТАТЬ) | х | х | ||
WRITE (ПИСАТЬ) | х | х | |||
REWRITE (ОБНОВИТЬ) | x | ||||
START (ПОДВЕСТИ) | x | x | |||
DELETE (УДАЛИТЬ) | x | ||||
Произвольный | READ (ЧИТАТЬ) | x | x | ||
WRITE (ПИСАТЬ) | x | x | |||
REWRITE (ОБНОВИТЬ) | x | ||||
START (ПОДВЕСТИ) | |||||
DELETE (УДАЛИТЬ) | x | ||||
Динамический | READ (ЧИТАТЬ) | x | x | ||
WRITE (ПИСАТЬ) | x | x | |||
REWRITE (ОБНОВИТЬ) | x | ||||
START (ПОДВЕСТИ) | x | ||||
DELETE (УДАЛИТЬ) | x |
(5) Файл может быть открыт с фразами INPUT (ВХОДНОЙ), OUTPUT (ВЫХОДНОЙ)
(6) Выполнение оператора OPEN (ОТКРЫТЬ) не извлекает и не записывает первую запись данных.
(7) Если указаны записи меток для файла, начальные метки обрабатываются следующим образом:
а) когда указана фраза INPUT (ВХОДНОЙ), оператор OPEN (ОТКРЫТЬ) осуществляет проверку меток в соответствии с процедурами, определенными реализацией для проверки входных меток;
б) когда указана фраза OUTPUT (ВЫХОДНОЙ), выполнение оператора OPEN (ОТКРЫТЬ) вызывает запись меток в соответствии с процедурами, определенными реализацией для записи выходных меток.
Действия оператора OPEN (ОТКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют, или не специфицированы, но присутствуют.
(8) Если во время выполнения оператора OPEN (ОТКРЫТЬ) возникает условие противоречия свойств файла, выполнение оператора OPEN (ОТКРЫТЬ) считается неуспешным (см. п.1.3.7 настоящей части).
(9) Если файл, открытый с фразой INPUT (ВХОДНОЙ), является необязательным файлом, не имеющимся в наличии, оператор OPEN (ОТКРЫТЬ) устанавливает указатель позиции файла для указания того, что необязательный входной файл отсутствует. |
(10) Когда файлы открыты как INPUT (ВХОДНОЙ) или I-O (ВХОДНОЙ-ВЫХОДНОЙ), указатель позиции файла устанавливается в литеры, имеющие наименьшую порядковую позицию в основной последовательности, связанной с файлом, и основной ключ записи устанавливается как ключ ссылки.
(11) Если указана фраза EXTEND (ДОПОЛНЯЕМЫЙ), оператор OPEN (ОТКРЫТЬ) устанавливает файл непосредственно после его последней логической записи. Последней логической записью для индексного файла является существующая в данный момент запись с наибольшим значением основного ключа. (12) Если задана фраза EXTEND (ДОПОЛНЯЕМЫЙ) и фраза LABEL (МЕТКИ) указывает, что записи меток присутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие действия: а) начальные метки файла обрабатываются только для однокатушечных или однотомных файлов; б) начальные метки катушки (тома) обрабатываются на последней катушке (томе), как если бы файл открывался как INPUT (ВХОДНОЙ); в) имеющиеся конечные метки файла обрабатываются, как если бы файл открывался как INPUT (ВХОДНОЙ). Затем эти метки удаляются; г) затем обработка продолжается, как если бы файл был открыт как OUTPUT (ВЫХОДНОЙ). |
(13) Оператор OPEN (ОТКРЫТЬ) с фразой I-O (ВХОДНОЙ-ВЫХОДНОЙ) должен относиться к файлу, поддерживающему операции ввода и вывода, допустимые для индексного файла, открытого для ввода-вывода. Выполнение оператора OPEN (ОТКРЫТЬ) с фразой I-O (ВХОДНОЙ-ВЫХОДНОЙ) подготавливает файл, на который он ссылается, как для операций ввода, так и для операций вывода.
(14) Если указана фраза I-O (ВХОДНОЙ-ВЫХОДНОЙ) и во фразе LABEL RECORDS (МЕТКИ) указано, что записи меток присутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие шаги:
а) проверку меток в соответствии с процедурами, определенными реализацией для проверки входных-выходных меток;
б) запись новых меток в соответствии с процедурами, определенными реализацией для записи входных-выходных меток.
(15) Для необязательного файла, являющегося недоступным, успешное выполнение оператора OPEN, (ОТКРЫТЬ) с фразами I-O (ВХОДНОЙ-ВЫХОДНОЙ)
OPEN OUTPUT имя-файла.
CLOSE имя-файла.
ОТКРЫТЬ ВЫХОДНОЙ имя-файла.
ЗАКРЫТЬ имя-файла.
За этими операторами следует выполнение оператора OPEN (ОТКРЫТЬ), указанного в исходной программе.
Успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) приводит к созданию файла, после которого этот файл не содержит записей.
(16) Во время выполнения оператора OPEN (ОТКРЫТЬ) обновляется значение состояния ввода-вывода, связанного с именем-файла (см. п.1.3.4 настоящей части).
(17) Если в операторе OPEN (ОТКРЫТЬ) указано более, чем одно имя-файла, результат выполнения этого оператора OPEN (ОТКРЫТЬ) такой, как если бы отдельный оператор OPEN (ОТКРЫТЬ) был написан для каждого имени-файла в том порядке, как они указаны в операторе OPEN (ОТКРЫТЬ).
(18) Минимальный и максимальный размеры записей файла устанавливаются во время создания файла и не должны изменяться впоследствии.
4.5. Оператор READ (ЧИТАТЬ)
4.5.1. Назначение
При последовательном доступе оператор READ (ЧИТАТЬ) делает доступной следующую логическую запись файла. При произвольном доступе оператор READ (ЧИТАТЬ) делает доступной указанную запись файла на устройстве массовой памяти.
4.5.2. Общий формат
Формат 1
Формат 2
4.5.3. Синтаксические правила
(1) Область памяти, связанная с идентификатором-1, и область записи, связанная с именем-файла-1, не должны быть одной и той же областью памяти.
(2) Имя-данного-1 должно быть именем данного, определенного в качестве ключа записи, связанной с именем-файла-1. (3) Имя-данного-1 может уточняться. |
(4) Формат 1 должен использоваться для всех файлов с последовательным доступом. |
(5) Фраза NEXT (СЛЕДУЮЩУЮ) должна быть указана для файлов с динамическим доступом, если записи файла должны извлекаться последовательно. |
(6) Формат 2 используется для файлов с произвольным доступом
(7) Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) или фраза AT END (В КОНЦЕ) должна быть указана, если для имени-файла-1 не указана никакая применимая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
4.5.4. Общие правила
(1) Во время выполнения оператора READ (ЧИТАТЬ) файл, на который ссылается имя-файла-1, должен быть открыт как входной или входной-выходной (см. п.4.4 настоящей части).
(2) Для файлов последовательного доступа фраза NEXT (СЛЕДУЮЩУЮ) является необязательной и не влияет на выполнение оператора READ (ЧИТАТЬ). |
(3) При выполнении оператора READ (ЧИТАТЬ) обновляется значение состояния ввода-вывода, связанного с именем-файла-1 (см. п.1.3.4 настоящей части).
(4) Установка указателя позиции файла в начале выполнения оператора READ (ЧИТАТЬ) формата 1 используется для определения записи, которая может быть доступной согласно следующим правилам.
В индексных файлах сравнения записей производится по значениям текущего ключа ссылки. Для индексных файлов сравнения производятся в соответствии с основной последовательностью для файла.
а) Если указатель позиции файла указывает, что не установлена следующая запись, выполнение оператора READ (ЧИТАТЬ) является неуспешным.
б) Если указатель позиции файла указывает, что необязательного входного файла нет, оператор выполняется согласно общему правилу (10). |
в) Если указатель позиции файла был установлен предыдущими операторами OPEN (ОТКРЫТЬ)
г) Если указатель позиции файла был установлен предыдущим оператором READ (ЧИТАТЬ)
д) Если указатель позиции файла был установлен предыдущим оператором READ (ЧИТАТЬ) и текущий ключ ссылки допускает дублирование, выбирается первая запись в файле, значение ключа которой либо равно указателю позиции файла и логическая позиция которой во множестве дубликатов следует сразу после записи, которая стала доступной благодаря предыдущему оператору READ (ЧИТАТЬ), либо значение ключа которой больше чем указатель позиции файла. |
Если найдена запись, удовлетворяющая вышеприведенным правилам, она становится доступной в области записи, связанной с именем-файла-1.
Если запись, удовлетворяющая приведенным выше правилам, не найдена, то указатель позиции файла устанавливается для указания того, что не существует следующей логической записи, и выполнение продолжается согласно общему правилу (10).
Если запись сделалась доступной, указателю позиции файла приписывается значение текущего ключа ссылки записи, ставшей доступной.
(5) Функционирование оператора READ (ЧИТАТЬ) не зависит от метода, используемого для согласования времени доступа со временем обработки; запись доступна объектной программе до выполнения повелительного-оператора-2 или повелительного-оператора-4, если они указаны, или до выполнения любого оператора, следующего за оператором READ (ЧИТАТЬ), если ни повелительный-оператор-2, ни повелительный-оператор-4 не указаны.
(6) Когда логические записи описаны более чем одной статьей описания записи, эти записи автоматически используют одну и ту же область памяти; это эквивалентно неявному переопределению области. По завершении оператора READ (ЧИТАТЬ) значения всех данных, находящихся вне диапазона текущей записи данных, не определены.
(7) Фраза INTO (В) может быть указана в операторе READ (ЧИТАТЬ), если:
а) только одно описание записи подчиняется статье описания файла;
б) все имена-записей, связанные с именем-файла-1, и данное, на которое ссылается идентификатор-1, описывают групповое данное или элементарное буквенно-цифровое данное.
(8) Результат выполнения оператора READ (ЧИТАТЬ) с фразой INTO (В) эквивалентен применению следующих правил в указанном порядке:
а) выполняется тот же оператор READ (ЧИТАТЬ) без фразы INTO (В);
(9) Если во время выполнения оператора READ (ЧИТАТЬ) формата 2 указатель позиции файла указывает, что нет необязательного входного файла, возникает условие ошибки ключа, а выполнение оператора READ (ЧИТАТЬ) является неуспешным (см. ч.8, п.1.3.5). |
(10) При использовании формата 1 оператора READ (ЧИТАТЬ), если указатель позиции файла показывает, что не существует последующей логической записи,
а) значение, полученное по указателю позиции файла, помещается в состояние ввода-вывода, соответствующее имени-файла-1, и указывает на условие "в конце" (см. п.1.3.4 настоящей части);
б) если в операторе, вызвавшем условие, задана фраза AT END (В КОНЦЕ), управление передается повелительному-оператору-1 фразы AT END (В КОНЦЕ).
Никакая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), связанная с именем-файла-1 не выполняется;
в) если фраза AT END (В КОНЦЕ) не задана, процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ) должна быть связана с именем-файла-1, и эта процедура выполняется. Возврат из этой процедуры осуществляется к следующему после оператора READ (ЧИТАТЬ) выполнимому оператору.
Если возникает условие "в конце", выполнение оператора READ (ЧИТАТЬ) неуспешно.
(11) Если во время выполнения оператора READ (ЧИТАТЬ) не возникают ни условие конца, ни условие ошибки ключа, фразы AT END (В КОНЦЕ) и INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) игнорируются, если они указаны, и выполняются следующие действия:
а) устанавливается значение указателя позиции файла и обновляется значение состояния ввода-вывода, связанного с именем-файла-1;
б) если возникает условие особой ситуации, не являющееся ни условием конца, ни условием ошибки ключа, управление передается процедуре USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ) согласно правилам для оператора USE (ИСПОЛЬЗОВАТЬ), применимого к имени-файла-1 (п.4.8 настоящей части);
в) если условие особой ситуации не существует, запись становится доступной в области записи и выполняются любые неявные пересылки, предопределенные фразой INTO (В). Управление передается в точку выхода оператора READ (ЧИТАТЬ) или повелительному-оператору-2, если он указан. В последнем случае выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется ветвление процедуры или условный оператор, вызывающие явную передачу управления, оно передается в соответствии с правилами для этих операторов; в противном случае после завершения выполнения повелителыюго-оператора-2 управление передается в точку выхода оператора READ (ЧИТАТЬ).
(12) После неуспешного выполнения оператора READ (ЧИТАТЬ) содержимое соответствующей области записи не определено, ключ ссылки для индексного файла не определен, а указатель позиции файла показывает, что правильная следующая запись не установлена.
(13) Для индексного файла, для которого задан динамический доступ, оператор READ (ЧИТАТЬ) формата 1 вызывает считывание следующей логической записи из этого файла. (14) Для индексного файла с последовательным доступом записи, имеющие одно и то же дублирующееся значение дополнительного ключа, являющегося ключом ссылки, становятся доступными в том порядке, в котором они передавались при выполнении операторов WRITE (ПИСАТЬ) или REWRITE (ОБНОВИТЬ), которые привели к возникновению этих дублирующихся значений. (15) Для индексного файла, если фраза KEY (КЛЮЧ) задана в формате 2 оператора READ (ЧИТАТЬ), в качестве ключа ссылки при извлечении записи учреждается имя-данного-1, указанное во фразе KEY (КЛЮЧ). Для файла с динамическим доступом этот же ключ ссылки используется для всех последующих выполнений операторов READ (ЧИТАТЬ) формата 1 до тех пор, пока для этого файла не будет учрежден другой ключ ссылки. |
(17) Выполнение оператора READ формата 2 устанавливает указатель позиции файла равным значению ключа ссылки. Это значение сравнивается со значением соответствующего данного в записях файла до тех пор, пока не будет найдена первая запись с равным значением.
(18) Если число позиций литер в прочитанной записи меньше минимального размера, указанного статьями описания записей для имени-файла-1, участок области записи, находящийся справа от последней прочитанной литеры, не определен. Если число позиций литер в прочитанной записи больше максимального размера, указанного статьями описания записей для имени-файла-1, запись усекается справа до максимального размера. В обоих случаях выполнение оператора READ (ЧИТАТЬ) считается успешным, а состояние ввода-вывода указывает, что возникло несоответствие длины записи (см. п.1.3.4 настоящей части).
(19) Фраза END-READ (КОНЕЦ-ЧИТАТЬ) ограничивает область действия оператора READ (ЧИТАТЬ) (см. ч.4, п.6.4.3).
4.6. Оператор REWRITE (ОБНОВИТЬ)
4.6.1. Назначение
Оператор REWRITE (ОБНОВИТЬ) логически заменяет запись в файле на устройстве массовой памяти.
4.6.2. Общий формат
REWRITE имя-записи-1 [FROM идентификатор-1] | |||
[INVALID KEY повелительный-оператор-1] | |||
[NOT INVALID KEY повелительныйгоператор-2] | |||
[END-REWRITE] | |||
ОБНОВИТЬ имя-записи-1 [ИЗ ПОЛЯ идентификатор-1] | |||
[ПРИ ОШИБКЕ КЛЮЧА иовелительный-оператор-1] | |||
[БЕЗ ОШИБКИ КЛЮЧА повелительный-оператор-2] | |||
[КОНЕЦ-ОБНОВИТЬ] |
4.6.3. Синтаксические правила
(1) Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.
(2) Имя-записи-1 - это имя логической записи в секции файлов раздела данных. Оно может быть уточнено.
(3) Если для соответствующего имени-файла не указана процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), фразы INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) должны указываться.
4.6.4. Общие правила
(1) Файл, связанный с именем-записи-1, должен быть файлом массовой памяти и должен быть открыт как входной-выходной во время выполнения этого оператора (см. п.4.4 настоящей части).
(2) Для файлов с последовательным доступом последним оператором ввода-вывода для соответствующего файла перед выполнением оператора REWRITE (ОБНОВИТЬ) должен быть успешно выполненный оператор READ (ЧИТАТЬ). СУМП логически заменяет запись, которая была извлечена оператором READ (ЧИТАТЬ).
(5) Выполнение оператора REWRITE (ОБНОВИТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентно выполнению следующих операторов в указанном порядке:
а) оператор
MOVE идентификатор-1 ТО имя-записи-1.
ПОМЕСТИТЬ идентификатор-1 В имя-записи-1 соответственно правилам, описанным для оператора MOVE (ПОМЕСТИТЬ);
б) тот же оператор REWRITE (ОБНОВИТЬ) без фразы FROM (ИЗ ПОЛЯ).
(7) Выполнение оператора REWRITE (ОБНОВИТЬ) не влияет на указатель позиции файла.
(8) Выполнение оператора REWRITE (ОБНОВИТЬ) вызывает обновление состояния ввода-вывода для файла, связанного с именем-записи-1 (см. п.1.3.4 настоящей части).
(9) При выполнении оператора REWRITE (ОБНОВИТЬ) логическая запись передается операционной системе.
(10) Передача управления после успешного или неуспешного выполнения оператора REWRITE (ОБНОВИТЬ) зависит от наличия или отсутствия в операторе REWRITE (ОБНОВИТЬ) необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) (см. п.1.3.5 настоящей части).
(11) Фраза END-REWRITE (КОНЕЦ-ОБНОВИТЬ) ограничивает область действия оператора REWRITE (ОБНОВИТЬ) (см. ч.4, п.6.4.3).
(13) Для файла с последовательным доступом запись, которая должна быть заменена, определяется значением основного ключа. При выполнении оператора REWRITE (ОБНОВИТЬ), значение основного ключа заменяющей записи должно быть равно значению основного ключа последней прочитанной из этого файла записи.
(14) Для файла с произвольным или динамическим доступом запись, подлежащая замене, указывается значением основного ключа записи.
(15) Выполнение оператора REWRITE (ОБНОВИТЬ) для записи, которая имеет дополнительный ключ, производится следующим образом: а) если значение конкретного дополнительного ключа не изменилось, порядок чтения в случае, когда этот ключ является ключом ссылки, остается неизменным; б) если значение конкретного дополнительного ключа изменилось, последующий порядок считывания этой записи может измениться, когда этот конкретный дополнительный ключ является ключом ссылки. Если допускается дублирование значений ключа, запись логически размещается последней среди множества записей дубликатов, содержащих такое же значение дополнительного ключа записи, которое было помещено в запись. |
(16) Условие ошибки ключа возникает в следующих случаях:
а) при последовательном доступе значение, содержащееся в основном ключе заменяющей записи, не равно значению основного ключа последней прочитанной из файла записи;
б) при
в) в файле, для которого не допускаются дубликаты, уже есть запись с указанным значением дополнительного ключа. |
(17) Если возникает условие ошибки ключа, выполнение оператора REWRITE (ОБНОВИТЬ) неуспешное, операция обновления не производится, данные в области записи не изменяются, а состоянию ввода-вывода для имени-файла, соответствующего имени-записи-1, присваивается значение, указывающее на причину возникновения ситуации (см. п.1.3.4 настоящей части).
4.7. Оператор START (ПОДВЕСТИ) 4.7.1. Назначение Оператор START (ПОДВЕСТИ) предоставляет возможность логического позиционирования индексного файла для дальнейшего последовательного извлечения записей. 4.7.2. Общий формат |
4.7.3. Синтаксические правила (1) Имя-файла-1 должно быть именем файла с последовательным или динамическим доступом. (2) Имя-данного-1 может уточняться. (3) Если для имени-файла-1 не определена соответствующая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), должна быть указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА). (4) Если задана фраза KEY (КЛЮЧ), имя-данного-1 должно ссылаться: а) либо на данное, описанное как ключ записи имени-файла-1 (см. пп.2.5, 2.7 настоящей части); б) либо на любое буквенно-цифровое данное, самая левая литера которого в записи файла соответствует самой левой литере ключа записи имени-файла-1 и длина которого не больше чем длина этого ключа. 4.7.4. Общие правила. (1) Файл, представленный именем-файла-1, ко времени выполнения оператора START (ПОДВЕСТИ) должен быть открыт для ввода или ввода-вывода (см. п.4.4 настоящей части). (2) Если фраза KEY (КЛЮЧ) не указана, подразумевается знак отношения EQUAL (РАВЕН). (3) Выполнение оператора START (ПОДВЕСТИ) не изменяет ни содержимое области записи, ни содержимое данного, представленного именем-данного, указанным во фразе DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы RECORD (В ЗАПИСИ), относящейся к имени-файла-1. |
(4) Сравнение, определяемое знаком отношения во фразе KEY (КЛЮЧ), проводится между ключом записи файла, представленного именем-файла-1, и данным, как указано в общих правилах (11) и (12). Сравнение производится относительно возрастания ключей ссылки в соответствии с основной последовательностью для файла. Если операнды сравнения неодинакового размера, сравнение производится так, как если бы более длинный операнд усекался справа до размера более короткого. Все другие правила нечислового сравнения остаются в силе (см. ч.4, п.6.3.1.1.2). а) Указателю позиции файла присваивается значение ключа ссылки первой из логических записей, ключ которых удовлетворяет сравнению. б) Если сравнение не удовлетворяется ни для одной записи файла, возникает условие ошибки ключа, и выполнение оператора START (ПОДВЕСТИ) считается неуспешным. (5) При выполнении оператора START (ПОДВЕСТИ) обновляется значение состояния ввода-вывода, относящегося к имени-файла-1 (см. п.1.3.4 настоящей части). (6) Если во время выполнения оператора START (ПОДВЕСТИ) указатель позиции файла определяет, что необязательный входной файл отсутствует, возникает условие ошибки ключа, и выполнение оператора START (ПОДВЕСТИ) является неуспешным. (7) Передача управления после успешного или неуспешного выполнения оператора START (ПОДВЕСТИ) зависит от наличия или отсутствия необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) в операторе START (ПОДВЕСТИ) (см. п.1.3.5 настоящей части). (8) После неуспешного выполнения оператора START (ПОДВЕСТИ) указатель позиции файла указывает, что правильная следующая запись не установлена. Кроме того для индексных файлов ключ ссылки становится неопределенным. |
(9) Фраза END-START (КОНЕЦ-ПОДВЕСТИ) ограничивает область действия оператора START (ПОДВЕСТИ) (см. ч.4, п.6.4.3). (10) Ключ ссылки устанавливается следующим образом: а) если фраза KEY (КЛЮЧ) не задана, основной ключ, заданный для имени-файла-1, становится ключом ссылки; б) если фраза KEY (КЛЮЧ) задана и имя-данного-1 задано в качестве ключа для имени-файла-1, этот ключ записи становится ключом ссылки; в) если фраза KEY (КЛЮЧ) задана, а имя-данного-1 не задано в качестве ключа для имени-файла-1, ключом ссылки становится ключ записи, самая левая литера которого соответствует самой левой литере данного, заданного именем-данного-1. Этот ключ ссылки используется для установления упорядочивания записей для этого оператора START (ПОДВЕСТИ), см. общее правило (4); и если выполнение оператора START (ПОДВЕСТИ) успешное, ключ ссылки используется для последующих операторов READ (ЧИТАТЬ) последовательного чтения (см. п.4.5 настоящей части). (11) Если фраза KEY (КЛЮЧ) задана, сравнение, описанное в общем правиле (4), использует данное, заданное именем-данного-1. (12) Если фраза KEY (КЛЮЧ) не задана, сравнение, описанное в общем правиле (4), использует данное, заданное во фразе RECORD KEY (КЛЮЧ ЗАПИСИ), соответствующей имени-файла-1. |
4.8. Оператор USE (ИСПОЛЬЗОВАТЬ)
4.8.1. Назначение
Оператор USE (ИСПОЛЬЗОВАТЬ) определяет процедуры обработки ошибок ввода-вывода дополнительно к стандартным процедурам, предоставляемым системой управления вводом-выводом.
4.8.2. Общий формат
4.8.3. Синтаксические правила
(1) Оператор USE (ИСПОЛЬЗОВАТЬ) должен непосредственно следовать за заголовком секции декларативной части раздела процедур и должен быть единственным в предложении. Остальная часть декларативной секции должна состоять из одного или более процедурных параграфов, определяющих процедуры, которые должны использоваться.
(2) Сам оператор USE (ИСПОЛЬЗОВАТЬ) никогда не выполняется; он только определяет условия, вызывающие выполнение указанных после него процедур.
(3) Появление имени-файла-1 в операторе USE (ИСПОЛЬЗОВАТЬ) не должно требовать одновременного выполнения более чем одной декларативной секции.
(4) Слова ERROR и EXCEPTION являются синонимами и взаимозаменяемы.
(5) Файлы, к которым явно или неявно обращаются в операторе USE (ИСПОЛЬЗОВАТЬ), могут иметь различную организацию или доступ.
4.8.4. Общие правила
(1) Декларативные процедуры могут быть включены в любую исходную Кобол-программу, независимо от того, содержит ли эта программа другую программу или сама содержится в другой программе. Декларатива вызывается тогда, когда во время выполнения программы выполняются условия, описанные в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе. Только одна декларатива внутри отдельно скомпилированной программы, содержащей оператор, который вызвал уточняющее условие, вызывается тогда, когда выполняется какое-либо из условий, описанных в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе, во время выполнения программы. Если не существует уточняющей декларативы в отдельно скомпилированной программе, то декларатива не выполняется.
(2) Внутри декларативной процедуры не должно быть обращений к каким-либо процедурам в недекларативной части раздела процедур.
(3) К именам процедур, связанных с оператором USE (ИСПОЛЬЗОВАТЬ), могут быть обращения в другой декларативной секции или в недекларативной процедуре только оператором PERFORM (ВЫПОЛНИТЬ).
(4) Когда имя-файла-1 описано явно, то к имени-файла-1 не применяется никаких других операторов USE (ИСПОЛЬЗОВАТЬ).
(5) Процедуры, связанные с оператором USE (ИСПОЛЬЗОВАТЬ), выполняются системой управления вводом-выводом после завершения стандартной программы ошибки ввода-вывода при неуспешном выполнении операции ввода-вывода, если не сработают фразы AT END (В КОНЦЕ) или INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА).
При выполнении процедуры соблюдаются следующие правила:
а) если указано имя-файла-1, то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ);
б) если указано INPUT (ВХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для ввода, или в процессе открытия для ввода, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
в) если указано OUTPUT (ВЫХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для вывода, или в процессе открытия для вывода за исключением файлов, указываемых именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
г) если указано I-O (ВХОДНЫХ-ВЫХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для ввода-вывода, или в процессе открытия для ввода-вывода, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
д) если указано EXTEND (ДОПОЛНЯЕМЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для дополнения, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие. |
(6) После выполнения процедуры, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), управление передается вызывающей программе в системе управления вводом-выводом. Если значение состояния ввода-вывода не указывает на критическую ошибку ввода-вывода, то система управления вводом-выводом возвращает управление оператору, следующему за оператором ввода-вывода, выполнение которого вызвало ошибку. Если значение состояния ввода-вывода указывает на критическую ошибку, то действие определяется реализацией (см. п.1.3.4 настоящей части).
(7) В процедуре, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), не должны выполняться никакие операторы, которые могут потребовать выполнения процедуры USE (ИСПОЛЬЗОВАТЬ), вызванной ранее и еще не вернувшей управление вызвавшей ее программе.
4.9. Оператор WRITE (ПИСАТЬ)
4.9.1. Назначение
Оператор WRITE (ПИСАТЬ) включает логическую запись в выходной или входной-выходной файл.
4.9.2. Общий формат
WRITE имя-записи-1 [FROM идентификатор-1] | ||
[INVALID KEY повелительный-оператор-1] | ||
[NOT INVALID KEY повелительный-оператор-2] | ||
[END-WRlTE] | ||
ПИСАТЬ имя-записи-1 [ИЗ ПОЛЯ идентификатор-1] | ||
[ПРИ ОШИБКЕ КЛЮЧА повелительный-оператор-1] | ||
[БЕЗ ОШИБКИ КЛЮЧА повелительный-оператор-2] | ||
[КОНЕЦ-ПИСАТЬ] |
4.9.3. Синтаксические правила
(1) Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.
(2) Имя-записи-1 является именем логической записи в секции файлов раздела данных и может быть уточнено.
(3) Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) должна указываться в операторе WRITE (ПИСАТЬ) для файлов, для которых не определена соответствующая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
4.9.4. Общие правила
(1) Файл, указанный именем-файла, связанным с именем-записи-1, должен быть открыт как выходной, входной-выходной
(3) Результат выполнения оператора WRITE (ПИСАТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентен выполнению следующих операторов в указанном порядке:
а) оператор
MOVE идентификатор-1 ТО имя-записи-1
ПОМЕСТИТЬ идентификатор-1 В имя-записи-1 соответственно правилам, специфицированным в операторе MOVE (ПОМЕСТИТЬ);
б) тот же оператор WRITE (ПИСАТЬ) без фразы FROM (ИЗ ПОЛЯ).
(5) Выполнение оператора WRITE (ПИСАТЬ) не влияет на указатель позиции файла.
(6) Выполнение оператора WRITE (ПИСАТЬ) вызывает обновление состояния ввода-вывода имени-файла, связанного с именем-записи-1 (см. п.1.3.4 настоящей части).
(7) При выполнении оператора WRITE (ПИСАТЬ) логическая запись передается операционной системе.
(8) Количество позиций литер в записи, указанной именем-записи-1, не должно быть больше наибольшего или меньше наименьшего числа литер, допустимого фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), связанной с именем-файла, связанного с именем-записи-1. В любом случае выполнение оператора WRITE (ПИСАТЬ) неуспешно, операция записи не происходит, содержимое области записи не меняется, и состояние ввода-вывода файла, связанного с именем-записи-1, принимает значение, указывающее на причину возникновения условия (см. п.1.3.4 настоящей части). |
(9) Если при выполнении оператора WRITE (ПИСАТЬ) с фразой NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) условие ошибки ключа не возникает, то управление передается повелительному-оператору-2 следующим образом:
а) если выполнение оператора WRITE (ПИСАТЬ) успешно, то управление передается после того, как запись записана, и после изменения состояния ввода-вывода имени-файла, связанного с именем-записи-1;
б) если выполнение оператора WRITE (ПИСАТЬ) неуспешно не из-за ошибки ключа, то управление передается после обновления состояния ввода-вывода для имени файла, связанного с именем-записи-1, и после выполнения процедуры, определенной оператором USE AFTER STANDARD EXCEPTION PROCEDURE (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), применимой к имени-файла, связанного с именем-записи-1, если таковая указана.
(10) Фраза END-WRITE (КОНЕЦ-ПИСАТЬ) ограничивает область действия оператора WRITE (ПИСАТЬ) (см. ч.4, п.6.4.3).
(11) Выполнение оператора WRITE (ПИСАТЬ) вызывает передачу содержимого области записи. Система управления массовой памятью использует содержимое ключей записи таким образом, чтобы последующий доступ к записи мог базироваться на любом, из этих заданных ключей записи.
(12) Значение основного ключа должно быть уникальным для записей файла.
(13) Данному, заданному в качестве основного ключа, требуемое значение должно присваиваться до выполнения оператора WRITE (ПИСАТЬ).
(14) Если файл открыт для последовательного доступа, записи должны передаваться системе управления массовой памятью в порядке возрастания значений основного ключа в соответствии с основной последовательностью для файла.
Если файл открыт для дополнения, первая запись, передаваемая системе управления массовой памятью, должна иметь значение основного ключа большее, чем максимальное значение основных ключей существующих записей файла. |
(15) Если файл открыт для произвольного или динамического доступа, записи могут передаваться системе управления массовой памятью в любом заданном в программе порядке.
(16) Если в статье описания индексного файла задана фраза ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ), значения дополнительного ключа записи могут быть не уникальными, только если для этого данного задана фраза DUPLICATES (С ДУБЛИРОВАНИЕМ). В этом случае система управления массовой памятью обеспечивает помещение записей таким образом, что, когда записи просматриваются последовательно, порядок считывания этих записей тот же, в котором они передавались системе управления массовой памятью. |
(17) Условие ошибки ключа возникает в следующих случаях:
а) если при последовательном доступе файл открыт для вывода или дополнения и значение основного ключа записи не больше чем значение основного ключа предыдущей записи или
б) если файл открыт для вывода или ввода-вывода и значение основного ключа записи равно значению основного ключа записи, уже существующей в файле, или
в) если файл открыт для вывода, дополнения или ввода-вывода и значение дополнительного ключа записи, для которого не допускается дублирование, равно соответствующему данному из записи, уже существующей в файле; |
г) когда сделана попытка писать запись вне границ, определенных для файла. |
(18) При обнаружении условия ошибки ключа выполнение оператора WRITE (ПИСАТЬ) считается неуспешным. Содержимое области записи не изменяется, а состояние ввода-вывода для имени файла, связанного с именем-записи-1, устанавливается на значение, указывающее причину этого условия. Выполнение программы продолжается в соответствии с правилами для условия ошибки ключа (см. пп.1.3.4, 1.3.5 настоящей части).
Часть 10. МОДУЛЬ МЕЖПРОГРАММНЫХ СВЯЗЕЙ
1. ВВЕДЕНИЕ В МОДУЛЬ МЕЖПРОГРАММНЫХ СВЯЗЕЙ
1.1. Назначение
1.2. Характеристика уровней
Уровень 1 модуля межпрограммных связей предоставляет средства для передачи управления одной или нескольким программам, имена которых известны во время компиляции, а также средства для использования общих данных такими программами.
Уровень 2 модуля межпрограммных связей предусматривает средства для передачи управления одной или нескольким программам, имена которых не известны во время компиляции, а также возможность определить во время выполнения наличие памяти для программы, которой передается управление. Кроме того, уровень 2 обеспечивает внешние атрибуты, глобальные имена и вложение исходных программ. |
1.3. Понятия языка
1.3.1. Вложенные исходные программы
1.3.2. Определитель файла
Определитель файла - это область памяти, которая содержит информацию о файле и используется для установления соответствия между именем файла и физическим файлом, а также между именем файла и связанной с ним областью записи.
1.3.3. Глобальные и локальные имена
Имя данного именует данное. Имя файла именует определитель файла. Эти имена классифицируются как
Глобальное имя может использоваться для обращения к объекту, с которым оно связано, из программы, в которой объявлено это глобальное имя, или из любой другой программы, которая содержится в программе, где объявляется это глобальное имя. |
Локальное имя можно использовать для обращения к объекту, с которым оно связано, только из программы, в которой это локальное имя объявлено. |
Некоторые имена всегда являются глобальными, некоторые имена всегда локальные; есть имена, которые могут быть локальными или глобальными в зависимости от спецификаций в программе, где эти имена объявлены. Имя записи является глобальным, если в статье описания записи, в которой объявляется имя записи, указана фраза GLOBAL (ГЛОБАЛЬНОЕ) или в случае статьи описания записи в секции файлов фраза GLOBAL (ГЛОБАЛЬНОЕ) указана в статье описания файла для имени файла, связанного со статьей описания записи. Имя данного является глобальным, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана в статье описания данного, которой объявляется имя данного, или в другой статье, которой эта статья описания данного подчинена. Имя условия, объявленное в статье описания данного, является глобальным, если эта статья подчиняется другой статье, в которой определена фраза GLOBAL (ГЛОБАЛЬНОЕ). Однако иногда специальные правила запрещают задавать фразу GLOBAL (ГЛОБАЛЬНОЕ) для определенных статей описания данных, описания файлов или описания записей. Имя файла является глобальным, если фраза GLOBAL (ГЛОБАЛЬНОЕ) определена в его статье описания файла. |
Если имя данного, имя файла или имя условия, объявленное в статье описания данного, не является глобальным, оно является локальным.
Глобальные имена являются транзитивными для программ, содержащихся в других программах.
1.3.4. Внешние и внутренние объекты
Обеспечение доступности данных обычно требует, чтобы в памяти хранились определенные представления данных. Определители файлов обычно требуют сохранения в памяти некоторой информации о файлах. Память, соответствующая данному или определителю файла, может быть
Данное или определитель файла является внешним, если память, связанная с этим объектом, соотнесена единице исполнения, а не какой-то конкретной программе внутри единицы исполнения. К внешнему объекту может обращаться любая программа в единице исполнения, которая описывает объект. Обращение ко внешнему объекту из разных программ, использующих отдельные описания объектов, - это всегда обращение к одному и тому же объекту. В единице исполнения имеется только одно представление внешнего объекта. |
Объект является внутренним, если память, связанная с этим объектом, соотнесена только программе, которая описывает этот объект.
Записи данных, подчиненные данные и различная связанная с ними управляющая информация, которые описаны в секциях связи, коммуникаций и отчетов программы, всегда считаются внутренними по отношению к программе, описывающей эти данные. Для данных, описанных в секции связи, существуют некоторые особенности, касающиеся установления соответствия между описанными записями данных и другими данными, доступными для других программ.
1.3.5. Общие и начальные программы Все программы, образующие часть единицы исполнения, могут иметь один или оба из следующих атрибутов: COMMON (ОБЩАЯ) и INITIAL (НАЧАЛЬНАЯ), или они могут не иметь этих атрибутов вообще. Общей программой называется программа, которая несмотря на то, что она является прямо содержащейся в другой программе, может быть вызвана программой, прямо или косвенно содержащейся в этой другой программе. Атрибут "общая" присваивается путем указания фразы COMMON (ОБЩАЯ) в разделе идентификации программы. Фраза COMMON (ОБЩАЯ) облегчает написание подпрограмм, которые будут использоваться всеми программами, содержащимися в данной программе. Начальная программа - это программа, состояние которой инициируется во время вызова. Таким образом при каждом вызове начальной программы ее состояние такое же, каким оно было при первом вызове этой программы в единице исполнения. В процессе инициации начальной программы инициируются внутренние данные программы; таким образом, данное из внутренних данных программы, описание которого содержит фразу VALUE (ЗНАЧЕНИЕ), инициируется на это указанное значение, а данное, описание которого не содержит фразу VALUE (ЗНАЧЕНИЕ), инициируется на неопределенное значение. Файлы с внутренними определителями файлов, которые связаны с программой, не находятся в открытом состоянии. Управляющие механизмы для всех операторов PERFORM (ВЫПОЛНИТЬ), находящихся в программе, устанавливаются в их начальное состояние. Атрибут "начальная" присваивается путем указания фразы INITIAL (НАЧАЛЬНАЯ) в разделе идентификации программы. |
1.3.6. Общие данные
Две программы в единице исполнения могут обращаться к общим данным в следующих случаях:
(1) к содержимому внешней записи данных можно обращаться из любой программы при условии, что запись данных описана в этой программе; (2) если программа содержится в другой программе, обе программы могут обращаться к данным, имеющим атрибут "глобальное" в содержащей программе или в любой программе, которая прямо или косвенно содержит содержащую программу; |
(3) механизм, с помощью которого значение параметра передается ссылкой из вызывающей программы в вызываемую программу, создает общее данное; вызываемая программа, которая может использовать другой идентификатор, может обращаться к данному в вызывающей программе.
1.3.7. Общие файлы Две программы в единице исполнения могут обращаться к общим определителям файлов в следующих случаях: (1) к внешнему определителю файла может обращаться любая программа, которая описывает этот определитель файла; (2) если программа содержится в другой программе, обе программы могут обращаться к общему определителю файла, указывая соответствующее глобальное имя-файла в содержащей программе или в любой программе, которая прямо или косвенно содержит содержащую программу. |
1.3.8. Область действия имен
Если программы прямо или косвенно содержатся в других программах, каждая программа может использовать одинаковые слова пользователя для именования объектов независимо от использования этих определенных пользователем слов другими программами (см. ч.4, п.4.2.2.1.1). Когда существуют одноименные объекты, ссылка в программе на такое имя, даже когда это другой тип слова пользователя, является ссылкой на объект, описываемый этой программой, а не на объект, имеющий такое же имя и описанный в другой программе.
Ссылки на следующие типы слов пользователя могут использоваться в операторах и статьях только той программы, в которой эти слова пользователя объявлены:
1) имя-коммуникации;
2) имя-параграфа;
3) имя-секции.
Ссылки на следующие типы слов пользователя могут использоваться в любой программе на Коболе при условии, что система компиляции поддерживает соответствующие библиотеки или другие системы и объекты, к которым обращаются, известны этой системе:
1) имя-библиотеки;
2) имя-текста.
Ссылки на следующие типы слов пользователя, когда они объявлены в секции коммуникаций, могут использоваться в оператоpax и объектах только той программы, которая содержит эту секцию:
1) имя-условия;
2) имя-данного;
3) имя-записи.
Ссылки на следующие типы имен, когда они объявлены в секции конфигурации, могут использоваться в операторах и статьях только той программы, которая содержит секцию конфигурации, или любой программы, содержащейся в этой программе:
1) имя-алфавита;
2) имя-класса;
3) имя-условия;
4) мнемоническое-имя;
5) символическая-литера.
К следующим типам слов пользователя применяются специальные соглашения, касающиеся объявлений и ссылок, когда перечисленные выше случаи не применимы:
1) имя-условия;
2) имя-данного;
3) имя-файла;
4) имя-индекса;
5) имя-программы;
6) имя-записи;
7) имя-отчета.
1.3.8.1. Соглашения для имен программ
Область действия имени программы определяется следующими правилами:
(1) если имя представляет имя программы, которая не имеет атрибут "общая" и которая прямо содержится в другой программе, оно может быть указано только в операторах, входящих в содержащую программу; (2) если имя представляет имя программы, которая имеет атрибут "общая" и прямо содержится в другой программе, на имя программы можно ссылаться только в операторах, входящих в эту содержащую программу или в любые программы, прямо или косвенно содержащиеся в этой содержащей программе, за исключением программы с атрибутом "общая" и всех программ, содержащихся в ней; |
(3) если имя представляет имя отдельно компилируемой программы, на имя программы можно ссылаться в операторах, входящих в любую программу в единице исполнения, кроме программ, которые она прямо или косвенно содержит.
1.3.8.2. Соглашения для имен условий, имен данных, имен файлов, имен записей и имен отчетов.
Требования к уникальности имен, определенных в одной программе в качестве имен условий, имен данных, имен файлов, имен записей и имен отчетов объясняются в других параграфах этих спецификаций (см. ч.4, п.4.2.2.1.1).
Программа не может ссылаться на имена условий, имена данных, имена файлов, имена записей и имена отчетов, объявленные в программе, которую она содержит. К глобальному имени можно обращаться в программе, в которой оно объявлено, или в любых программах, которые прямо или косвенно содержатся в этой программе. Когда программа В1 прямо содержится в другой программе, программе А, обе программы могут определять имя условия, имя данного, имя файла, имя записи или имя отчета, используя одно и то же слово пользователя. Когда к такому дублируемому имени обращаются в программе В1, для установления объекта, к которому обращаются, используются следующие правила: (1) набор имен, используемый для установления объекта, к которому обращаются, включает все имена, которые определены в программе В1, и все глобальные имена, которые определены в программе А и в программах, содержащих прямо или косвенно программу А. Обычные правила уточнения и все другие правила установления уникальности ссылки применяются для этого набора имен до тех пор, пока не будет идентифицирован один или несколько объектов; (2) если идентифицируется только один объект, он является объектом, к которому обращаются; |
(3) если идентифицируется несколько объектов, максимум один из них может иметь имя, локальное по отношению к программе В1. Если ни один или один из объектов имеет имя, локальное по отношению к В1, применяются следующие правила: а) если имя объявлено в программе В1, объект в программе В1 является объектом, к которому обращаются; б) в остальных случаях, если программа А содержится в другой программе, объектом, к которому обращаются, является: |
1) объект в программе А, если имя объявлено в программе А; 2) объект в содержащей программе, если имя объявлено не в программе А, а в программе, содержащей программу А. Это правило применяется для последующих содержащих программ до тех пор, пока не будет найдено единственное правильное имя. 1.3.8.3. Соглашения для имен индексов Если данное, имеющее один из атрибутов "внешнее" или "глобальное" или оба эти атрибута, включает таблицу, доступ к которой осуществляется по индексу, этот индекс тоже имеет соответствующий атрибут или оба атрибута. Следовательно, область действия имени-индекса такая же, как область действия имени-данного, именующего таблицу, индекс которой именуется именем-индекса, и используются те же правила именования, что и для имен-данных. Имена-индексов не могут уточняться. |
2. ВЛОЖЕННЫЕ ИСХОДНЫЕ ПРОГРАММЫ 2.1. Общее описание Исходная программа Кобола - это синтаксически правильный набор операторов Кобола. Исходная программа Кобола может содержать другие исходные программы Кобола, и эти содержащиеся программы могут обращаться к некоторым ресурсам программы, в которой они содержатся. 2.2. Организация За исключением операторов COPY (КОПИРОВАТЬ), REPLACE (ЗАМЕНИТЬ) и заголовка конца программы, операторы, статьи, параграфы и секции исходной программы Кобола группируются в четыре раздела, которые располагаются в следующей последовательности. 1. Раздел идентификации. 2. Раздел оборудования. 3. Раздел данных. 4. Раздел процедур. Конец исходной программы Кобола указывается заголовком конца программы или отсутствием дополнительных строк в исходной программе. 2.3. Структура Ниже приводится общий формат и последовательность представления статей и операторов, которые образуют исходную программу Кобола. Обобщенные термины раздел-идентификации, раздел-оборудования, раздел-данных, исходная-программа и заголовок-конца-программы обозначают раздел идентификации Кобола, раздел оборудования Кобола, раздел данных Кобола, раздел процедур Кобола, исходную программу Кобола и заголовок конца программы Кобола, соответственно. 2.3.1. Общий формат Раздел-идентификации [раздел-оборудования] [раздел-данных] [раздел-процедур] [исходная-программа] … [заголовок-конца-программы] |
2.3.2. Синтаксические правила (1) Заголовок-конца-программы должен быть указан, если: а) исходная программа Кобола содержит одну или несколько других исходных программ Кобола, или б) исходная программа Кобола в другой исходной программе Кобола. 2.3.3. Общие правила (1) Начало раздела в программе указывается соответствующим заголовком раздела. Конец раздела указывается одним из следующих способов: а) заголовком следующего раздела в этой программе; б) заголовком раздела идентификации, который указывает на начало другой исходной программы; в) заголовком конца программы; г) физической позицией, после которой больше не появляются строки исходной программы. (2) Исходная программа Кобола, которая прямо или косвенно содержится в другой программе, рассматривается в этих спецификациях как отдельная программа, которая может дополнительно обращаться к некоторым ресурсам, определенным в содержащей программе. (3) Объектный код, получаемый в результате компиляции исходной программы, содержащейся в другой программе, рассматривается в этих спецификациях как неотъемлемая часть объектного кода, получающегося в результате компиляции содержащей программы. |
2.4. Начальное состояние программы
Начальное состояние программы - это состояние программы в момент ее первого вызова в единице исполнения.
2.4.1. Характеристики программы
(1) Инициируются внутренние данные программы, находящиеся в секции рабочей памяти и секции коммуникаций. Если фраза VALUE (ЗНАЧЕНИЕ) используется в описании данного, это данное инициируется на указанное значение.
Если данному не соответствует фраза VALUE (ЗНАЧЕНИЕ), начальное значение данного не определено.
(2) Файлы с внутренними определителями файлов, связанные с программой, не находятся в открытом состоянии.
(3) Управляющие механизмы для всех операторов PERFORM (ВЫПОЛНИТЬ), находящихся в программе, устанавливаются в свое начальное состояние.
(4) Оператор GO TO (ПЕРЕЙТИ К), на который ссылается оператор ALTER (ИЗМЕНИТЬ), находящийся в этой же программе, устанавливается в свое начальное состояние.
2.4.2. Программы в начальном состоянии
Программа находится в начальном состоянии:
(1) при первом вызове программы в единице исполнения;
(2) при первом вызове программы после выполнения оператора CANCEL (ОСВОБОДИТЬ) для этой программы или программы, которая прямо или косвенно содержит эту программу; |
(3) при каждом вызове программы, если она имеет атрибут "начальная";
(4) при первом вызове программы после выполнения оператора CALL (ВЫЗВАТЬ) для программы, которая имеет атрибут "начальная" и которая прямо или косвенно содержит данную программу.
2.5. Заголовок конца программы
2.5.1. Назначение
Заголовок конца программы указывает на конец названной исходной программы Кобола.
2.5.2. Общий формат
END PROGRAM имя-программы.
КОНЕЦ-ПРОГРАММЫ имя-программы.
2.5.3. Синтаксические правила
(1) Имя-программы должно подчиняться правилам образования слов, определяемых пользователем.
(2) Имя-программы должно быть таким же, как имя-программы, объявленное в предыдущем параграфе PROGRAM-ID (ПРОГРАММА) (п.3.1 настоящей части).
(3) Если параграф PROGRAM-ID (ПРОГРАММА), объявляющий некоторое имя-программы, помещается между параграфом PROGRAM-ID (ПРОГРАММА) и заголовком конца программы, соответственно объявляющим и ссылающимся на другое имя-программы, заголовок конца программы, указывающий первое имя-программы, должен предшествовать заголовку, в котором указывается второе имя-программы. |
2.5.4. Общие правила |
(1) Заголовок конца программы должен присутствовать в каждой программе, которая либо содержит другую программу, либо содержится в другой программе. |
(2) Заголовок конца программы обозначает конец указанной исходной программы Кобола. |
(3) Если программа, которая заканчивается заголовком конца программы, содержится в другой программе, следующий оператор должен быть заголовком раздела идентификации или другим заголовком конца программы, который завершает содержащую программу. |
3.1. Параграф PROGRAM-ID (ПРОГРАММА) и вложенные исходные программы 3.1.1. Назначение Параграф PROGRAM-ID (ПРОГРАММА) определяет имя, по которому идентифицируется программа, и присваивает этой программе выбранные атрибуты. 3.1.2. Общий формат |
3.1.3. Синтаксические правила (1) Имя-программы должно соответствовать правилам образования слов, определяемых пользователем. (2) Программе, содержащейся в другой программе, нельзя присваивать имя, которое уже имеет некоторая другая программа, содержащаяся в отдельно компилируемой программе, которая содержит эту программу. (3) Необязательная фраза COMMON (ОБЩАЯ) может использоваться только тогда, когда программа содержится в другой программе. 3.1.4. Общие правила (1) Имя-программы идентифицирует исходную программу, объектную программу и все листинги, относящиеся к конкретной программе. (2) Фраза COMMON (ОБЩАЯ) указывает, что программа является общей. Общая программа содержится в другой программе и может быть вызвана не только из программы, в которой она содержится, но и из других программ (см. п.1.3.8 настоящей части). (3) Фраза INITIAL (НАЧАЛЬНАЯ) указывает, что программа является начальной. При вызове начальной программы она и все содержащиеся в ней программы устанавливаются в их начальное состояние (см. п.2.4 настоящей части). |
4. РАЗДЕЛ ДАННЫХ В МОДУЛЕ МЕЖПРОГРАММНЫХ СВЯЗЕЙ
4.1. Секция связи
Секция связи находится в разделе данных исходной программы. Секция связи появляется в вызываемой программе и описывает данные, к которым будет обращаться и вызывающая и вызываемая программа.
Секция связи в программе необходима тогда и только тогда, когда объектная программа должна работать под управлением оператора CALL (ВЫЗВАТЬ) и оператор CALL (ВЫЗВАТЬ) в вызывающей программе содержит фразу USING (ИСПОЛЬЗУЯ). Секция связи используется для описания данных, которые доступны через вызывающую программу, но к которым можно обращаться как в вызывающей, так и в вызываемой программе. Механизм, с помощью которого устанавливается соответствие между данными, описанными в секции связи вызываемой программы, и данными, описанными в вызывающей программе, рассматривается в пп.5.1 и 5.2 настоящей части. Для имен индексов такое соответствие не устанавливается, и имена индексов в вызываемой и вызывающей программах всегда ссылаются на отдельные индексы.
Секция связи имеет такую же структуру, как и ранее описанная секция рабочей памяти. Сначала записывается заголовок секции, за ним следуют статьи описания несвязанных данных и (или) статьи описания записей.
Ниже приведен общий формат секции связи.
LINKAGE SECTION.
СЕКЦИЯ СВЯЗИ.
Если к данному секции связи обращаются в программе, которая не является вызываемой, результат не определен.
4.1.1. Несвязанная память
Данные в секции связи, которые не находятся в иерархическом отношении друг с другом, нет необходимости группировать в записи. Такие данные классифицируются и определяются как несвязанные элементарные данные. Каждое из этих данных определяется отдельной статьей описания данного, которая начинается специальным номером уровня 77.
В каждой статье описания данного необходимы следующие фразы:
а) номер-уровня-77
б) имя-данного
в) фраза PICTURE (ШАБЛОН) или фраза USAGE IS INDEX (ДЛЯ ИНДЕКСА).
Другие статьи описания данных необязательны и могут использоваться в случае необходимости для завершения описания данного.
4.1.2. Записи секции связи
Элементы данных в секции связи, которые состоят в определенных иерархических отношениях друг с другом, должны быть сгруппированы в записи в соответствии с правилами формирования описаний записей. Данные в секции связи, которые не состоят в иерархических отношениях с другими данными, могут быть описаны как записи, представляющие собой одиночные элементарные данные.
4.1.3. Начальные значения
Фраза VALUE (ЗНАЧЕНИЕ) не должна задаваться в секции связи. Исключение составляют статьи имен-условий (уровень 88).
4.2. Статья описания файла в модуле межпрограммных связей
4.2.1. Назначение
Внутри модуля межпрограммных связей статья описания файла в секции файлов определяет внутренние или внешние атрибуты определителя файла, соответствующих записей данных в соответствующих данных. Кроме того, статья описания файла устанавливает, является имя файла локальным или глобальным.
4.2.2. Общий формат
Формат 1
Формат 2
Формат 3
4.2.3. Синтаксические правила
(1) Формат 1 - это статья описания последовательного файла. Присутствие конкретных фраз в этой статье описания файла зависит от уровня модуля последовательного ввода-вывода, обеспечиваемого реализацией (см. ч.7, п.3.2).
(2) Формат 2 - это статья описания относительного файла или индексного файла. Присутствие конкретных фраз в этой статье описания файла зависит от уровня модуля относительного ввода-вывода или модуля индексного ввода-вывода, обеспечиваемого реализацией (см. ч.8, п.3.2, ч.9, п.3.2).
(3) Формат 3 - это статья описания файла отчетов. Наличие статьи описания для файла отчетов зависит от того, обеспечивается ли модуль генератора отчетов в данной реализации (ч.13, п.3.2).
4.2.4. Общие правила
(1) Если статья описания последовательного файла содержит фразу LINAGE (ВЕРСТКА) и фразу EXTERNAL (ВНЕШНЕЕ), данное LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) является внешним данным. Если статья описания последовательного файла содержит фразу LINAGE (ВЕРСТКА) и фразу GLOBAL (ГЛОБАЛЬНОЕ), специальный регистр LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) является глобальным именем.
(2) Фраза EXTERNAL (ВНЕШНЕЕ) описана в п.4.5. Фраза GLOBAL (ГЛОБАЛЬНОЕ) описана в п.4.6. Все остальные фразы в статье описания файла описаны в соответствующем модуле в этих спецификациях.
4.3. Статья описания данного в модуле межпрограммных связей
4.3.1. Назначение
В модуле межпрограммных связей статья описания данного уровня 01 в секции рабочей памяти или в секции файлов устанавливает, какие имена - локальные или глобальные, имеет запись данных и подчиненные ей данные.
В модуле межпрограммных связей статья описания данного уровня 01 в секции рабочей памяти определяет атрибут "внутреннее" или "внешнее" для записи данного и подчиненных ей данных.
4.3.2. Общий формат
4.3.3. Синтаксические правила
(1) Наличие конкретных фраз в статье описания данного зависит от уровня ядра, обеспечиваемого в данной реализации (см. ч.6, п.5.3).
(2) Фраза EXTERNAL (ВНЕШНЕЕ) может быть задана только в статьях описания данных уровня 01 в секции рабочей памяти. (3) Фраза EXTERNAL (ВНЕШНЕЕ) и фраза REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) не должны задаваться в одной и той же статье описания данного. (4) Фраза GLOBAL (ГЛОБАЛЬНОЕ) может быть задана только в статьях описания данных уровня 01. (5) Имя-данного-1 должно быть задано для любой статьи, содержащей фразу GLOBAL (ГЛОБАЛЬНОЕ) или EXTERNAL (ВНЕШНЕЕ), или для описаний записей, связанных со статьей описания файла, которая содержит фразу EXTERNAL (ВНЕШНЕЕ) или GLOBAL (ГЛОБАЛЬНОЕ). |
4.3.4. Общие правила
4.4. Статья описания отчета в модуле межпрограммных связей
4.4.1. Назначение
В модуле межпрограммных связей статья описания отчета в секции отчетов устанавливает, является имя отчета локальным именем или глобальным.
4.4.2. Общий формат
4.4.3. Синтаксические правила
(1) Наличие статьи описания отчета зависит от того, обеспечивается ли модуль генератора отчетов в данной реализации (ч.13, п.3.5).
4.4.4. Общие правила
(1) Если статья описания отчета содержит фразу GLOBAL (ГЛОБАЛЬНОЕ), специальный регистры LINE-COUNTER (СЧЕТЧИК-СТРОК) и PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) являются глобальными именами. |
2)
4.5. Фраза EXTERNAL (ВНЕШНЕЕ) 4.5.1. Назначение Фраза EXTERNAL (ВНЕШНЕЕ) указывает, что данное или определитель файла является внешним. Составляющие данные и групповые данные внешней записи данного доступны каждой программе в единице исполнения, которая описывает эту запись. 4.5.2. Общий формат IS EXTERNAL ВНЕШНЕЕ 4.5.3. Синтаксические правила (1) Фраза EXTERNAL (ВНЕШНЕЕ) может быть задана только в статьях описания файлов (см. пп.4.2, 4.3 настоящей части) или в статьях описания записей в секции рабочей памяти (см. п.4.3 настоящей части). (2) В одной и той же программе имя-данного, указанное в качестве субъекта статьи с номером уровня 01, включающей фразу EXTERNAL (ВНЕШНЕЕ), не должно совпадать с именем-данного, указанного для любой другой статьи описания данного, которая включает фразу EXTERNAL (ВНЕШНЕЕ). |
(3) Фразу VALUE (ЗНАЧЕНИЕ) нельзя использовать ни в одной статье описания данного, которая включает статью, содержащую фразу EXTERNAL (ВНЕШНЕЕ), или подчиняется такой статье. Фраза VALUE (ЗНАЧЕНИЕ) может быть задана для статей имен-условий, связанных с такими статьями описания данных. 4.5.4. Общие правила (1) Данные, находящиеся в записи, которую именует фраза имени-данного, являются внешними и могут быть доступны и обрабатываться любой программой в единице исполнения, которая описывает и, возможно, переопределяет их в соответствии со следующими общими правилами. (2) Если в единице исполнения две или несколько программ описывают одну и ту же внешнюю запись данных, каждое имя-записи соответствующих статей описания записей должно быть одним и тем же, а записи должны определять одно и то же количество литер в стандартном формате данных. Однако программа, которая описывает внешнюю запись, может содержать статью описания данного с фразой REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ), переопределяющей полную внешнюю запись, и это полное переопределение не должно появляться в идентичном виде в других программах в единице исполнения (см. ч.6, п.5.10). (3) Использование фразы EXTERNAL (ВНЕШНЕЕ) не подразумевает, что соответствующее имя-файла или имя-данного является глобальным именем (п.4.6 настоящей части). (4) Определитель файла, связанный с этой статьей описания, является внешним определителем файла.
|
4.6. Фраза GLOBAL (ГЛОБАЛЬНОЕ) 4.6.1. Назначение Фраза GLOBAL (ГЛОБАЛЬНОЕ) указывает, что имя-данного, имя-файла или имя-отчета является глобальным именем. Глобальное имя доступно каждой программе, содержащейся в программе, которая объявляет это имя. 4.6.2. Общий формат IS GLOBAL ГЛОБАЛЬНОЕ 4.6.3. Синтаксические правила (1) Фраза GLOBAL (ГЛОБАЛЬНОЕ) может быть задана только в статьях описания данных уровня 01 в секции файлов или секции рабочей памяти, статьях описания файлов или статьях описания отчетов. (2) В одном и том же разделе данных статьи описания данных для любых двух данных, для которых задано одинаковое имя, не должны включать фразу GLOBAL (ГЛОБАЛЬНОЕ). (3) Если для нескольких файлов задана фраза SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), статьи описания записей или статьи описания файлов для этих файлов не должны включать фразу GLOBAL (ГЛОБАЛЬНОЕ). 4.6.4. Общие правила (1) Имя-данного, имя-файла или имя-отчета, описанное фразой GLOBAL (ГЛОБАЛЬНОЕ), является глобальным именем. Все имена данных, подчиненные глобальному имени, являются глобальными именами. Все имена условий, связанные с глобальным именем, являются глобальными именами. (2) Оператор в программе, которая прямо или косвенно содержится в программе, описывающей глобальное имя, может обращаться к этому имени без его повторного описания (см. п.1.3.8 настоящей части). (3) Если фраза GLOBAL (ГЛОБАЛЬНОЕ) используется в статье описания данного, которая содержит фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) или RENAMES (ПЕРЕИМЕНОВЫВАЕТ), атрибутом "глобальное" обладает только субъект фразы REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) или RENAMES (ПЕРЕИМЕНОВЫВАЕТ). |
5. РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ МЕЖПРОГРАММНЫХ СВЯЗЕЙ
5.1. Заголовок раздела процедур
Раздел процедур идентифицируется и должен начинаться следующим заголовком:
PROCEDURE DIVISION [USING {имя-данного-1} ... ].
РАЗДЕЛ ПРОЦЕДУР [ИСПОЛЬЗУЯ {имя-данного-1} ... ].
Фраза USING (ИСПОЛЬЗУЯ) требуется только тогда, когда объектная программа будет вызываться по оператору CALL (ВЫЗВАТЬ), который содержит фразу USING (ИСПОЛЬЗУЯ).
Фраза USING (ИСПОЛЬЗУЯ) в заголовке раздела процедур идентифицирует имена, используемые программой для всех параметров, которые передаются ей из вызывающей программы. Параметры, передаваемые вызываемой программе, идентифицируются во фразе USING (ИСПОЛЬЗУЯ) оператора CALL (ВЫЗВАТЬ) в вызывающей программе. Соответствие между этими двумя списками имен устанавливается по позиционному принципу.
Имя-данного-1 должно быть определено как статья уровня 01 или статья уровня 77 в секции связи. Конкретное слово, определенное пользователем, может появляться в качестве имени-данного-1 только один раз. Статья описания данного для имени-данного-1 не должна содержать фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ). Однако имя-данного-1 может быть объектом фразы REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) в других местах в секции связи.
Применяются следующие дополнительные правила:
(1) если ссылка на соответствующее данное в операторе CALL (ВЫЗВАТЬ) объявляет передачу параметра по значению, значение данного пересылается во время выполнения оператора CALL (ВЫЗВАТЬ) и помещается в определяемый системой элемент памяти, который имеет атрибуты, объявленные в секции связи для имени-данного-1. Описание данных для каждого параметра во фразе BY CONTENT (ЗНАЧЕНИЕ) оператора CALL (ВЫЗВАТЬ) должно быть таким же, как описание данного для соответствующего параметра во фразе USING (ИСПОЛЬЗУЯ) заголовка раздела процедур, т.е. не должно требоваться какого-либо преобразования, расширения или усечения (см. п.5.2 настоящей части); |
(2) если ссылка на соответствующее данное в операторе CALL (ВЫЗВАТЬ) объявляет передачу параметра ссылкой, объектная программа выполняется так, как если бы данное в вызываемой программе занимало такую же область в памяти, как и данное в вызывающей программе.
Описание данного в вызываемой программе должно определять такое же количество позиций литер, какое указано в описании соответствующего данного в вызывающей программе;
(3) во всех случаях в вызываемой программе ссылки на имя-данного-1 разрешаются в соответствии с описанием данного в секции связи вызываемой программы;
(4) к данным, определенным в секции связи вызываемой программы, можно обращаться внутри раздела процедур этой программы тогда и только тогда, когда они удовлетворяют одному из следующих условий:
а) они являются операндами фразы USING (ИСПОЛЬЗУЯ) заголовка раздела процедур;
б) они подчиняются операндам фразы USING (ИСПОЛЬЗУЯ) заголовка раздела процедур;
в) они определяются фразой REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) или RENAMES (ПЕРЕИМЕНОВЫВАЕТ), объект которой удовлетворяет приведенным выше условиям;
г) они являются элементами, подчиненными любому элементу, который удовлетворяет условию в правиле 4в;
д) они являются именами-условий или именами-индексов, связанными с данными, которые удовлетворяют любому из четырех перечисленных выше условий.
На уровне 1 во фразе USING (ИСПОЛЬЗУЯ) заголовка раздела процедур и во фразе USING (ИСПОЛЬЗУЯ) оператора CALL (ВЫЗВАТЬ) должно допускаться не менее пяти имен данных.
5.2. Оператор CALL (ВЫЗВАТЬ)
5.2.1. Назначение
Оператор CALL (ВЫЗВАТЬ) вызывает передачу управления от одной объектной программы к другой внутри единицы исполнения.
5.2.2. Общий формат
Формат 1
Формат 2
5.2.3. Синтаксические правила
(1) Литерал-1 должен быть нечисловым литералом.
(2) Идентификатор-1 должен быть определен как буквенно-цифровое данное такое, что его значение может быть именем-программы. |
(3) Каждый операнд во фразе USING (ИСПОЛЬЗУЯ) должен быть предварительно определен как данное в секции файлов, секции рабочей памяти, секции коммуникаций или секции связи и должен быть данным уровня 01, уровня 77 или элементарным данным.
5.2.4. Общие правила
(1) Литерал-1
(3) Если во время выполнения оператора CALL (ВЫЗВАТЬ) устанавливается, что программа, заданная в операторе CALL (ВЫЗВАТЬ), не может стать доступной для выполнения в это время, будет выполнено одно из указанных действий. Ресурсы времени выполнения, которые должны проверяться с целью установления доступности вызываемой программы для выполнения, определяются реализацией.
(4) Две или несколько программ в единице исполнения могут иметь одно и то же имя-программы, и ссылка в операторе CALL (ВЫЗВАТЬ) на такое имя-программы разрешается по правилам для области действия для имен программ (см. п.1.3.8.1 настоящей части). Например, когда только две программы в единице исполнения имеют одинаковое имя, которое указано в операторе CALL (ВЫЗВАТЬ): а) одна из этих двух программ должна прямо или косвенно содержаться в отдельно компилируемой программе, в которой находится этот оператор CALL (ВЫЗВАТЬ), или в отдельно компилируемой программе, которая сама прямо или косвенно содержит программу, в которой находится этот оператор CALL (ВЫЗВАТЬ), и б) вторая из этих двух программ должна быть другой отдельно компилируемой программой. Механизм, используемый в этом примере, состоит в следующем: а) если одна из двух программ, имеющих одинаковое имя, которое указано в операторе CALL (ВЫЗВАТЬ), прямо содержится в программе, в которой находится оператор CALL (ВЫЗВАТЬ), эта программа вызывается; б) если одна из двух программ, имеющих одинаковое имя, которое указано в операторе CALL (ВЫЗВАТЬ), имеет атрибут "общая" и прямо содержится в другой программе, прямо или косвенно содержащей программу, в которой находится оператор CALL (ВЫЗВАТЬ), вызывается эта общая программа, если только вызывающая программа не содержится в этой общей программе; |
в) в остальных случаях вызывается отдельно компилируемая программа.
При всех остальных входах в вызываемую программу состояние этой программы и каждой программы, прямо или косвенно содержащейся в ней, остается таким же, каким оно было во время последнего выхода из программы. |
(6) Если вызываемая программа имеет атрибут "начальная", она и каждая программа, прямо или косвенно содержащаяся в ней, устанавливается в свое начальное состояние при каждом вызове вызываемой программы в единице исполнения. |
(7) Файлы, связанные с внутренними определителями файлов вызываемой программы, не находятся в открытом состоянии, когда программа находится в начальном состоянии (см. п.2.4 настоящей части). При всех остальных входах в вызываемую программу состояние и позиционирование всех таких файлов такое, каким оно было при последнем выходе из вызываемой программы. |
(8) Процесс вызова программы или выхода из вызываемой программы не изменяет состояние или позиционирование файла, связанного с внешним определителем файла. |
(9) Если вызываемая программа - это программа Кобола, фраза USING (ИСПОЛЬЗУЯ) включается в оператор CALL (ВЫЗВАТЬ) только тогда, когда в заголовке раздела процедур вызываемой программы имеется фраза USING (ИСПОЛЬЗУЯ); в этом случае количество операндов в каждой фразе USING (ИСПОЛЬЗУЯ) должно быть одинаковым. Если вызываемая программа - это программа не на Коболе, использование фразы USING (ИСПОЛЬЗУЯ) определяется реализацией.
(10) Последовательность появления имен-данных во фразе USING (ИСПОЛЬЗУЯ) оператора CALL (ВЫЗВАТЬ) и в соответствующей фразе USING (ИСПОЛЬЗУЯ) в заголовке раздела процедур вызываемой программы устанавливает соответствие между именами-данных, используемыми в вызывающей и вызываемой программах. Это соответствие является позиционным, а не определяется эквивалентностью имен; первое имя-данного в одной фразе USING (ИСПОЛЬЗУЯ) соответствует первому имени-данного во второй фразе, второе имя-данного в одной фразе соответствует второму имени данного во второй фразе USING (ИСПОЛЬЗУЯ) и т.д.
(11) Значения параметров, названных во фразе USING (ИСПОЛЬЗУЯ) оператора CALL (ВЫЗВАТЬ), становятся доступными для вызываемой программы во время выполнения оператора CALL (ВЫЗВАТЬ).
(14) Если для параметра задана или подразумевается фраза BY CONTENT (ЗНАЧЕНИЕ), вызываемая программа не может изменить значение этого параметра, указанного во фразе USING (ИСПОЛЬЗУЯ) оператора CALL (ВЫЗВАТЬ), хотя вызываемая программа может изменить значение данного, представленного соответствующим именем данного в заголовке раздела процедур вызываемой программы. Описание данного для каждого параметра во фразе BY CONTENT (ЗНАЧЕНИЕ) оператора CALL (ВЫЗВАТЬ) должно быть таким же, как описание данного для соответствующего параметра во фразе USING (ИСПОЛЬЗУЯ) заголовка раздела процедур, т.е. не должно требоваться какого-либо преобразования, расширения или усечения (см. п.5.1 настоящей части). |
(15) Вызываемые программы могут содержать операторы CALL (ВЫЗВАТЬ). Однако вызываемая программа не должна выполнять оператор CALL (ВЫЗВАТЬ), который прямо или косвенно вызывает вызывающую программу. Если оператор CALL (ВЫЗВАТЬ) выполняется в области действия декларативы, оператор CALL (ВЫЗВАТЬ) не может прямо или косвенно обратиться к какой-либо вызываемой программе, которой было передано управление и выполнение которой еще не завершено.
(16) Фраза END-CALL (КОНЕЦ-ВЫЗВАТЬ) ограничивает область действия оператора CALL (ВЫЗВАТЬ) (см. ч.4, п.7).
5.3. Оператор CANCEL (ОСВОБОДИТЬ) 5.3.1. Назначение Оператор CANCEL (ОСВОБОДИТЬ) обеспечивает, что при следующем вызове названной программы она будет находиться в начальном состоянии. 5.3.2. Общий формат |
5.3.3. Синтаксические правила (1) Литерал-1 должен быть нечисловым. (2) Идентификатор-1 должен относиться к буквенно-цифровому данному. 5.3.4. Общие правила (1) Литерал-1 или содержимое данного, представленного идентификатором-1, идентифицирует программу, которая должна быть освобождена. (2) В результате выполнения явного или неявного оператора CANCEL (ОСВОБОДИТЬ) прекращается всякая логическая связь программы, которая указывается в нем, с единицей исполнения, в которой появляется оператор CANCEL (ОСВОБОДИТЬ). Если программа, названная в успешно выполненном в единице исполнения явном или неявном операторе CANCEL (ОСВОБОДИТЬ), позднее вызывается в этой же единице исполнения, эта программа находится в начальном состоянии (см. пп.1.3.8, 2.4 и 5.2 настоящей части). (3) Программа, названная в операторе CANCEL (ОСВОБОДИТЬ) в другой программе, должна быть вызвана этой другой программой (см. пп.1.3.8 и 5.2 настоящей части). (4) При выполнении явного или неявного оператора CANCEL (ОСВОБОДИТЬ) все программы, содержащиеся в программе, которая названа в операторе CANCEL (ОСВОБОДИТЬ), тоже освобождаются. Результат такой же, как если бы правильный оператор CANCEL (ОСВОБОДИТЬ) выполнялся для каждой содержащейся программы в последовательности, обратной той, в которой программы появляются в отдельно компилируемой программе. |
(5) Программа, названная в операторе CANCEL (ОСВОБОДИТЬ), не должна прямо или косвенно обращаться к программе, которая была вызвана, но еще не выполнила оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ). (6) Логическая связь с освобожденной программой устанавливается только в результате выполнения следующего оператора CALL (ВЫЗВАТЬ), в котором названо имя этой программы. |
(7) Вызываемая программа освобождается посредством указания ее в качестве операнда оператора CANCEL (ОСВОБОДИТЬ), в результате завершения единицы исполнения, в состав которой входит данная программа, или в результате выполнения оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) в вызываемой программе, имеющей атрибут "начальная". |
(8) Никаких действий не выполняется при выполнении явного или неявного оператора CANCEL (ОСВОБОДИТЬ), называющего программу, которая не была вызвана в этой единице исполнения или была |
вызвана, но в настоящее время освобождена. Управление передается следующему выполнимому оператору после явного оператора CANCEL (ОСВОБОДИТЬ). |
(9) Содержимое данных во внешних записях данных, описанных в программе, не изменяется при освобождении этой программы. (10) Во время выполнения явного или неявного оператора CANCEL (ОСВОБОДИТЬ) выполняется неявный оператор CLOSE (ЗАКРЫТЬ) без всяких необязательных фраз для каждого файла в открытом состоянии, который связан с внутренним определителем файла в программе, названной в явном операторе CANCEL (ОСВОБОДИТЬ). Все процедуры USE (ИСПОЛЬЗОВАТЬ), относящиеся к любому из этих файлов, не выполняются. |
5.4. Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ)
5.4.1. Назначение
Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) отмечает логический конец вызываемой программы.
5.4.2. Общий формат
EXIT PROGRAM
ВЫЙТИ ИЗ ПРОГРАММЫ
5.4.3. Синтаксические правила
(1) Если оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) появляется в последовательности повелительных операторов внутри предложения, он должен быть последним оператором в этой последовательности.
(2) Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) не должен появляться в декларативной процедуре, в которой указана фраза GLOBAL (ГЛОБАЛЬНО).
5.4.4. Общие правила
(1) Если оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) выполняется в программе, которая не находится под управлением вызывающей программы, оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) вызывает продолжение выполнения программы со следующего выполнимого оператора.
(2) Выполнение оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) в вызываемой программе, которая не имеет атрибута "начальная", вызывает продолжение выполнения со следующего выполнимого оператора после оператора CALL (ВЫЗВАТЬ) в вызывающей программе. Состояние вызывающей программы не изменяется и идентично ее состоянию во время выполнения оператора CALL (ВЫЗВАТЬ). Исключение составляет только содержимое данных и файлов данных, совместно используемых вызываемой и вызывающей программами, которое могло быть изменено. Состояние вызываемой программы не изменяется, только считается, что достигнут конец области действия для всех операторов PERFORM (ВЫПОЛНИТЬ), выполняемых этой вызванной программой.
(3) За исключением действий, перечисленных в общем правиле (2), выполнение оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) в вызываемой программе с атрибутом "начальная" эквивалентно также выполнению оператора CANCEL (ОСВОБОДИТЬ), обращающегося к этой программе (см. п.5.3 настоящей части). 5.5. Оператор USE (ИСПОЛЬЗОВАТЬ) 5.5.1. Назначение В модуле межпрограммных связей оператор USE (ИСПОЛЬЗОВАТЬ) определяет, вызываются ли соответствующие декларативные процедуры во время выполнения любой программы, содержащейся в программе, в которой находится оператор USE (ИСПОЛЬЗОВАТЬ). 5.5.2. Общий формат |
|
5.5.3. Синтаксические правила (1) Наличие нескольких имен-файлов и фразы EXTEND (ДОПОЛНЯЕМЫХ) зависит от уровня модуля последовательного ввода-вывода, относительного ввода-вывода или индексного ввода-вывода, обеспечиваемого реализацией (см. ч.7, п.5.6.4, ч.8, п.4.8, ч.9, п.4.8). 5.5.4. Общие правила (1) При вложении программы в другие программы соблюдаются специальные правила предшествования. При применении этих правил только первая уточняющая декларатива будет выбрана для выполнения. Декларатива, выбираемая для выполнения, должна удовлетворять правилам выполнения этой декларативы. Порядок предшествования для выбора декларативы таков: а) декларатива внутри программы, которая содержит оператор, вызвавший уточняющее условие; б) декларатива, в которой задана фраза GLOBAL (ГЛОБАЛЬНО) и которая находится в программе, прямо содержащей программу, которая была проверена последней на уточняющую декларативу; в) любая декларатива, выбранная в результате применения правила 1б для каждой более объемлющей содержащей программы до тех пор, пока правило 1б не будет применено к наиболее объемлющей программе. Если уточняющая декларатива не найдена, ничего не выполняется. 5.6 Оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) 5.6.1. Назначение В модуле межпрограммных связей оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) устанавливает, вызываются ли соответствующие декларативные процедуры во время выполнения любой программы, содержащейся в программе, в которой находится оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ). |
5.6.2. Общий формат USE [GLOBAL] BEFORE REPORTING идентификатор-1 ИСПОЛЬЗОВАТЬ [ГЛОБАЛЬНО] ДО ВЫДАЧИ идентификатор-1 |
5.6.3. Синтаксические правила |
(1) Наличие оператора USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) зависит от того, обеспечивает ли данная реализация модуль генератора отчетов (ч.13, п.4.8.2). |
5.6.4. Общие правила (1) При вложении одних программ в другие программы соблюдаются специальные правила предшествования. При применении этих правил только первая декларатива будет выбрана для выполнения. Декларатива, выбираемая для выполнения, должна удовлетворять правилам выполнения этой декларативы. Порядок предшествования для выбора декларативы таков: а) декларатива внутри программы, в которой находится оператор, вызвавший уточняющее условие; б) декларатива, в которой задана фраза GLOBAL (ГЛОБАЛЬНО) и которая находится внутри программы, прямо содержащей программу, которая была проверена последней на уточняющую декларативу; в) любая декларатива, выбранная путем применения правила 1б для каждой более объемлющей содержащей программы до тех пор, пока правило 1б не будет применено к самой объемлющей программе. Если уточняющая декларатива не найдена, ничего не выполняется. |
Часть 11. МОДУЛЬ СОРТИРОВКИ-СЛИЯНИЯ
1. ВВЕДЕНИЕ В МОДУЛЬ СОРТИРОВКИ-СЛИЯНИЯ
1.1. Назначение
Модуль сортировки-слияния обеспечивает возможности упорядочения записей одного или более файлов или комбинирования записей двух или более одинаково упорядоченных файлов в соответствии с набором определенных пользователем ключей, содержащихся в каждой записи. При желании пользователь может применить некоторую специальную обработку для каждой отдельной записи, используя процедуры ввода или вывода. Такая специальная обработка может быть применена до и (или) после того, как записи упорядочены оператором SORT (СОРТИРОВАТЬ), или после того, как записи были объединены оператором MERGE (СЛИТЬ).
1.2. Понятия языка
1.2.1. Сортируемый файл
Сортируемый файл - это совокупность записей, которые должны быть упорядочены оператором SORT (СОРТИРОВАТЬ). Сортируемый файл не имеет меток, которыми может управлять программист, и правила блокирования и распределения внутренней памяти является внутренней функцией оператора SORT (СОРТИРОВАТЬ).
Операторы RELEASE (ПЕРЕДАТЬ) и RETURN (ВЕРНУТЬ) не определяют буферных областей, блокирования, размещения на катушках. Таким образом, сортируемый файл представляется внутренним файлом, который создается (с помощью оператора RELEASE (ПЕРЕДАТЬ)) из входного файла, обрабатывается (с помощью оператора SORT (СОРТИРОВАТЬ)) и выводится (с помощью оператора RETURN (ВЕРНУТЬ)) в выходной файл.
Сортируемый файл называется в статье управления файлом и описывается в статье описания сортируемого-сливаемого файла. На сортируемый файл ссылаются в операторах RELEASE (ПЕРЕДАТЬ), RETURN (ВЕРНУТЬ) и SORT (СОРТИРОВАТЬ).
1.2.2. Сливаемый файл
Сливаемый файл - это совокупность записей, предназначенных для слияния с помощью оператора MERGE (СЛИТЬ). Программист не может управлять метками сливаемого файла; правила блокирования и распределения внутренней памяти являются внутренней функцией оператора MERGE (СЛИТЬ). Оператор RETURN (ВЕРНУТЬ) не определяет буферных областей, блокирования, размещения на катушках. Таким образом, сливаемый файл представляется внутренним файлом, который создается из входных файлов посредством их слияния (с помощью оператора MERGE (СЛИТЬ)) и выводится (оператором RETURN (ВЕРНУТЬ)) в выходной файл.
Сливаемый файл называется в статье управления файлом и описывается в статье описания сортируемого-сливаемого файла. На сливаемый файл ссылаются в операторах RETURN (ВЕРНУТЬ) и MERGE (СЛИТЬ).
2. РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ СОРТИРОВКИ-СЛИЯНИЯ
2.1. Секция ввода-вывода
Информация, относящаяся к секции ввода-вывода, содержится в ч.7, п.2.1.
2.2. Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ)
Информация, относящаяся к параграфу FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ), содержится в ч.7, п.2.2.
2.3. Статья управления файлом
2.3.1. Назначение
Статья управления файлом объявляет существенные свойства файла сортировки или файла слияния.
2.3.2. Общий формат
2.3.3. Синтаксические правила
(1) Каждый сортируемый или сливаемый файл, описанный в разделе данных, должен быть назван в одной статье управления файлом. Каждый сортируемый или сливаемый файл, описанный во фразе SELECT (ДЛЯ), должен иметь статью описания сортируемого или сливаемого файла в разделе данных.
(2) Если имя-файла-1 представляет сортируемый или сливаемый файл, то разрешается только фраза ASSIGN (НАЗНАЧИТЬ), которая должна следовать за именем-файла-1 в параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ).
2.3.4. Общие правила
(1) Фраза ASSIGN (НАЗНАЧИТЬ) указывает связь файла, представленного именем-файла-1, с носителем данных, представленным именем-реализации-1 или литералом-1.
2.4. Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ)
2.4.1. Назначение
Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) указывает общие области памяти, которые используются различными файлами, включая сортируемые и сливаемые файлы.
2.4.2. Общий формат
2.4.3. Синтаксическое правило
(1) Допустимость варианта RECORD (ЗАПИСИ) во фразе SAME (ОБЩАЯ ОБЛАСТЬ) зависит от уровня реализации модуля последовательного ввода-вывода.
2.4.4. Общее правило
Фраза SAME RECORD/SORT/SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ/СОРТИРОВКИ/СОРТИРОВКИ-СЛИЯНИЯ) для модуля сортировки-слияния описана в п.2.5.
2.5. Фразы SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) и SAME SORT/SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ/СОРТИРОВКИ-СЛИЯНИЯ)
2.5.1. Назначение
Фразы SAME RECORD (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) и SAME SORT/SORT-MERGE (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ/СОРТИРОВКИ-СЛИЯНИЯ) определяют область памяти, которую одновременно используют разные файлы, среди которых имеется хотя бы один сортируемый или сливаемый файл.
2.5.2. Общий формат
2.5.3. Синтаксические правила
(1) Каждое имя-файла, указанное во фразе SAME RECORD (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) или SAME SORT/SORT-MERGE (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ/СОРТИРОВКИ-СЛИЯНИЯ), должно быть указано в параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) той же самой программы.
(2) Имя-файла-1 и имя-файла-2 не могут ссылаться на определитель внешнего файла.
(3) Варианты SORT (СОРТИРОВКИ) и SORT-MERGE (СОРТИРОВКИ-СЛИЯНИЯ) эквивалентны.
(4) Имя сортируемого или сливаемого файла не должно быть указано во фразе SAME (ОБЩАЯ) без вариантов RECORD (ЗАПИСИ), SORT (СОРТИРОВКИ) или SORT-MERGE (СОРТИРОВКИ-СЛИЯНИЯ).
(5) Фраза SAME (ОБЩАЯ) может быть включена в программу (в любом из трех возможных вариантов) более одного раза, однако:
а) имя-файла не должно появляться более чем в одной фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ);
б) имя-файла, указывающее сортируемый или сливаемый файл, не может появляться более чем в одной фразе SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ) или SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ);
в) если имя-файла, не относящееся к сортируемому или сливаемому файлу, появляется во фразе SAME (ОБЩАЯ ОБЛАСТЬ) и в одной или более фразах SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ) или SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ) (см. ч.7, п.2.13), то все файлы, указанные в этой фразе SAME (ОБЩАЯ ОБЛАСТЬ) должны быть указаны в той же фразе SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ) или SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ).
(6) Файлы, указанные во фразах SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ), SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ) или SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), могут иметь различную организацию или доступ.
2.5.4. Общие правила
(1) Фраза SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) указывает, что два или более файлов, представленных именем-файла-1 и именем-файла-2, должны использовать общую область памяти для обработки текущей логической записи. Все файлы могут быть открыты одновременно. Логическая запись в общей области записи рассматривается как логическая запись каждого открытого выходного файла, имя которого встречается во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), и как логическая запись читавшегося последним входного файла, имя которого встречается в этой же фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Это равносильно неявному переопределению области, то есть записи располагаются с самой левой позиции литеры.
(2) Если используется фраза SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ) или SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ), то хотя бы одно из имен-файлов должно указывать сортируемый или сливаемый файл. Эта фраза указывает, что память используется следующим образом:
а) любая из этих фраз указывает область памяти, которая будет доступна для использования при сортировке или слиянии каждого указанного сортируемого или сливаемого файла. Такая область памяти, резервируемая для слияния или сортировки одного файла, доступна для повторного использования в сортировке или слиянии и для других сортируемых или сливаемых файлов;
б) области памяти, назначенные файлам, не являющимся сортируемыми или сливаемыми файлами, могут быть назначены, при необходимости, для сортируемых или сливаемых файлов, указанных в какой-либо из этих фраз. Особенности такого назначения должны быть указаны реализацией;
в) файлы, не являющиеся сортируемыми или сливаемыми, не используют одну и ту же область памяти. Если пользователь хочет, чтобы эти файлы использовали общую область памяти, он должен включить в программу фразу SAME (ОБЩАЯ ОБЛАСТЬ) или SAME RECORD (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), называющую эти файлы;
г) во время выполнения операторов SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ), ссылающихся на файл, указанный во фразах SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ) или SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ), не должен быть открыт никакой файл, не являющийся сортируемым или сливаемым файлом, указанный в этой фразе.
3. РАЗДЕЛ ДАННЫХ В МОДУЛЕ СОРТИРОВКИ-СЛИЯНИЯ
3.1. Секция файлов
Секция файлов расположена в разделе данных исходной программы. Секция файлов определяет структуру сортируемых и сливаемых файлов. Каждый сортируемый или сливаемый файл описывается статьей описания сортируемого-сливаемого файла и одной или более статьями описания записи. Статьи описания записи размещаются непосредственно после статьи описания сортируемого-сливаемого файла.
Общий формат секции файлов в модуле сортировки-слияния приведен ниже.
3.1.1. Статья описания сортируемого-сливаемого файла
В Кобол-программе статья описания сортируемого-сливаемого файла (статья SD (ОС)) является высшим уровнем организации в секции файлов. После заголовка секции файлов следует статья описания сортируемого-сливаемого файла, состоящая из индикатора уровня SD (ОС), имени-файла и последовательности независимых фраз. Фразы статьи описания сортируемого-сливаемого файла (статьи SD (ОС)) определяют размер и имена записей данных, относящихся к сортируемому или сливаемому файлу.
Для таких файлов не предусмотрены управляемые пользователем процедуры меток, а правила объединения записей в блоки и выделения внутренней памяти являются внутренней функцией операторов SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ).
Статья описания сортируемого-сливаемого файла оканчивается точкой.
3.1.2. Структура описания записи
Описание записи состоит из ряда статей описания данных, описывающих характеристики отдельной записи. Каждая статья описания данного состоит из номера-уровня, за которым следует имя-данного или фраза FILLER (ЗАПОЛНИТЕЛЬ), если указаны, далее может быть указана последовательность независимых фраз. Описание записи может иметь иерархическую структуру, поэтому используемые в статье фразы могут существенно отличаться друг от друга в зависимости от того, следуют ли за ней подчиненные статьи.
Структура описания записи и допустимых в статье описания записи элементов приводится в ч.4, п.4.3.2 и ч.6, п.5.3. Допустимые в статье описания данных фразы соответствуют уровню модуля ядра, поддерживаемого реализацией.
3.1.3. Начальные значения
Начальные значения данных в секции файлов не определены.
3.2. Статья описания сортируемого-сливаемого файла
3.2.1. Назначение
Описание сортируемого или сливаемого файла дает информацию, касающуюся физической структуры и идентификации записей файла, подлежащего сортировке или слиянию.
3.2.2. Общий формат
3.2.3. Синтаксические правила
(1) Индикатор уровня SD (ОС) указывает начало статьи описания сортируемого или сливаемого файла и должен предшествовать имени-файла.
(2) Фразы, следующие за именем-файла-1, необязательны, и порядок их следования не существенен.
(3) Одна или более статей описания записи должны следовать за статьей описания сортируемого или сливаемого файла, однако, никакой оператор ввода-вывода не может быть выполнен для этого файла.
(4) Возможность использования формата 2 фразы RECORD (В ЗАПИСИ) зависит от уровня модуля последовательного ввода-вывода, поддерживаемого реализацией.
3.2.4. Общие правила
(1) Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) модуля сортировки-слияния аналогична фразе DATA RECORDS (ЗАПИСИ ДАННЫХ) модуля последовательного ввода-вывода. Поэтому правила для фразы DATA RECORDS (ЗАПИСИ ДАННЫХ) см. в ч.7, п.3.5. Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) рассматривается в настоящем стандарте как устаревший элемент и будет удалена в следующей редакции стандарта.
(2) Фраза RECORD (В ЗАПИСИ) модуля сортировки-слияния аналогична фразе RECORD (В ЗАПИСИ) модуля последовательного ввода-вывода. Поэтому правила для фразы RECORD (В ЗАПИСИ) см. ч.7, п.3.8.
4. РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ СОРТИРОВКИ-СЛИЯНИЯ
4.1. Оператор MERGE (СЛИТЬ)
4.1.1. Назначение
Оператор MERGE (СЛИТЬ) комбинирует два или более файлов, одинаково упорядоченных по указанному набору ключей, и во время этого процесса делает записи доступными в порядке слияния процедуре вывода или выходному файлу.
4.1.2. Общий формат
4.1.3. Синтаксические правила
(1) Оператор MERGE (СЛИТЬ) может указываться в любом месте раздела процедур, кроме декларатив.
(2) Имя-файла-1 должно быть описано в статье описания сортируемого-сливаемого файла в разделе данных.
(3) Если файл, представленный именем-файла-1, содержит записи переменной длины, размер записей, содержащихся в файлах, представленных именем-файла-2 и именем-файла-3, должен быть не меньше самой короткой и не больше самой длинной из записей, описанных для имени-файла-1. Если файл, представленный именем-файла-1, содержит записи фиксированной длины, размер записей, содержащихся в файлах, представленных именем-файла-2 и именем-файла-3, должен быть не больше, чем самая длинная запись, описанная для имени-файла-1.
(4) Имя-данного-1 является именем ключа и подчиняется следующим правилам:
а) имена ключей должны быть описаны в записях, связанных с именем-файла-1;
б) имена ключей могут уточняться;
в) имена ключей не должны быть групповыми данными, содержащими переменно повторяющиеся данные;
г) если имя-файла-1 имеет более одного описания записи, то имена-данных, указанных как имена ключей, должны быть описаны только в одном из описаний записей. Одни и те же позиции литер, определяемые именами ключей в одной статье описания записи, считаются ключами всех записей этого файла;
д) описания ключей не должны содержать фразу OCCURS (ПОВТОРЯЕТСЯ) или быть подчиненными статьям, имеющим фразу OCCURS (ПОВТОРЯЕТСЯ);
е) если файл, представленный именем-файла-1, содержит записи переменной длины, все имена ключей должны содержаться в первых х позициях литер записи, где х равно минимальному размеру записи, определенному для файла, представленного именем-файла-1.
(5) В разделе данных статьи описания имени-файла-2, имени-файла-3, имени-файла-4 не должны иметь индикатор уровня SD (ОС).
(6) В операторе MERGE (СЛИТЬ) не может быть указано несколько файлов, размещенных на одной катушке.
(7) В пределах одного оператора MERGE (СЛИТЬ) никакое из имен-файлов не может указываться несколько раз.
(8) Никакие два имени-файла в операторе MERGE (СЛИТЬ) не могут быть указаны в одной и той же фразе SAME AREA (ОБЩАЯ ОБЛАСТЬ), SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ), SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ). Исключение составляют только имена-файлов, относящиеся к фразе GIVING (ПОЛУЧАЯ) (см. ч.7, пп.2.13 и 2.5 настоящей части).
(9) Слова THRU и THROUGH являются синонимами.
(10) Если имя-файла-4 определяет индексный файл, первое определение имени-данного-1 должно быть связано с фразой ASCENDING (ПО ВОЗРАСТАНИЮ), а данное, представленное именем-данного-1, должно занимать те же позиции литер в записи, что и данное, соответствующее основному ключу записи файла.
(11) Если указана фраза GIVING (ПОЛУЧАЯ), а файл, представленный именем-файла-4, содержит записи переменной длины, размер записей, содержащихся в файле, представленном именем-файла-1, должен быть не меньше, чем самая короткая, и не больше, чем самая длинная запись, описанная для имени-файла-4. Если файл, представленный именем-файла-4, содержит записи фиксированной длины, размер записей, содержащихся в файле, представленном именем-файла-1, должен быть не больше, чем самая длинная запись, описанная для имени-файла-4.
4.1.4. Общие правила
(1) Оператор MERGE (СЛИТЬ) объединяет в один файл все записи, содержащиеся в файлах, указанных именем-файла-2 и именем-файла-3.
(2) Если файл, представленный именем-файла-1, содержит только записи фиксированной длины, всякая запись файла, представленного именем-файла-2 или именем-файла-3, содержащая меньше литерных позиций, чем значение фиксированной длины, дополняется пробелами справа, начиная с первой позиции после последней литеры в записи, когда эта запись помещается в файл, представленный именем-файлa-1.
(3) Указанные во фразе KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) имена-данных перечисляются в операторе MERGE (СЛИТЬ) в порядке уменьшения значимости, независимо от того, как они распределены между фразами KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА). Согласно формату, имя-данного-1 - самый главный ключ, имя-данного-2 - следующий по значимости ключ и т.д.
а) Если указана фраза ASCENDING (ПО ВОЗРАСТАНИЮ КЛЮЧА), то сливаемая последовательность будет создаваться от наименьшего значения данных, указанных именами ключей, к наибольшему значению в соответствии с правилами сравнения в условии отношения.
б) Если указана фраза DESCENDING (ПО УБЫВАНИЮ КЛЮЧА), то сливаемая последовательность будет создаваться от наибольшего значения данных, указанных именами ключей, к наименьшему значению в соответствии с правилами сравнения операндов в условии отношения.
(4) Если, в соответствии с правилами сравнения операндов в условиях отношения, значения всех ключей одной записи данных равны соответствующим значениям ключей одной или нескольких других записей данных, порядок поступления этих записей соответствует порядку указания входных файлов в операторе MERGE (СЛИТЬ); при этом все записи, связанные с одним входным файлом, поступают до поступления записей других входных файлов.
(5) Основная последовательность при сравнении нечисловых данных определяется в начале выполнения оператора MERGE (СЛИТЬ) в следующем порядке старшинства:
а) во-первых, основная последовательность, установленная фразой COLLATING SEQUENCE (АЛФАВИТ), если она указана в операторе MERGE (СЛИТЬ);
б) во-вторых, основная последовательность, установленная как программный алфавит.
(6) Если записи файлов, представленных именем-файла-2 и именем-файла-3, не упорядочены в соответствии с фразами ASCENDING (ПО ВОЗРАСТАНИЮ КЛЮЧА) и DESCENDING (ПО УБЫВАНИЮ КЛЮЧА) оператора MERGE (СЛИТЬ), результат оператора слияния не определен.
(7) Все записи файлов, представленных именем-файла-2 и именем-файла-3, переносятся в файл, представленный именем-файла-1. В начале выполнения оператора MERGE (СЛИТЬ) файлы, представленные именем-файла-2 и именем-файла-3, не должны быть открыты. Для каждого из файлов, представленных именем-файла-2 и именем-файла-3, выполнение оператора MERGE (СЛИТЬ) приводит к следующим действиям:
а) начинается обработка файла так, как будто был выполнен оператор OPEN (ОТКРЫТЬ) с фразой INPUT (ВХОДНОЙ). Если указана процедура вывода, то обработка начинается до передачи управления процедуре вывода;
б) логические записи получаются и передаются операции слияния. Каждая запись получается таким образом, как будто был выполнен оператор READ (ЧИТАТЬ) с фразами NEXT (СЛЕДУЮЩУЮ) и AT END (В КОНЦЕ);
в) обработка файла завершается так, как будто был выполнен оператор CLOSE (ЗАКРЫТЬ) без каких-либо дополнительных фраз. Если указана процедура вывода, это завершение не выполняется до тех пор, пока управление не будет возвращено после выполнения последнего оператора процедуры вывода.
Эти неявные функции выполняются таким образом, что выполняются все соответствующие процедуры USE AFTER EXCEPTION/ERROR (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ).
(8) Процедура вывода может состоять из любой процедуры, необходимой для выбора, изменения или копирования записей, поочередно доступных посредством оператора RETURN (ВЕРНУТЬ) в порядке слияния из файла, представленного именем-файла-1.
Процедура включает все операторы, выполняемые в результате передачи управления по операторам CALL (ВЫЗВАТЬ), EXIT (ВЫЙТИ), GO TO (ПЕРЕЙТИ) и PERFORM (ВЫПОЛНИТЬ) в рамках процедуры вывода, а также все операторы декларативных процедур, выполняемых в результате выполнения операторов, находящихся в области действия процедуры вывода. В области действия процедуры вывода не должен выполняться ни один из операторов MERGE (СЛИТЬ), RELEASE (ПЕРЕДАТЬ), SORT (СОРТИРОВАТЬ) (см. ч.4, п.4.4).
(9) Если процедура вывода определена, то управление передается ей в процессе выполнения оператора MERGE (СЛИТЬ). Компилятор вставляет механизм возврата в конец последней секции процедуры вывода. Когда управление достигает последнего оператора в процедуре вывода, механизм возврата обеспечивает окончание слияния, а затем передает управление следующему после оператора MERGE (СЛИТЬ) выполнимому оператору. Перед входом в процедуру вывода процедура слияния доходит до точки, в которой она, если потребуется, может выбрать очередную запись в порядке слияния. Операторы RETURN (ВЕРНУТЬ) в процедуре вывода являются запросами на получение следующей записи.
(10) Во время выполнения процедуры вывода нельзя выполнять операторы, ссылающиеся на файлы, представленные именем-файла-2 или именем-файла-3, или область записи, связанную с именем-файла-2 или именем-файла-3. Во время выполнения любой процедуры, определенной оператором USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), неявно вызванной при выполнении оператора MERGE (СЛИТЬ), нельзя выполнять операторы, ссылающиеся на файлы, представленные именем-файла-2, именем-файла-3 или именем-файла-4, или область записи, связанную с именем-файла-2, именем-файла-3 или именем-файла-4.
(11) Если указана фраза GIVING (ПОЛУЧАЯ), сливаемые записи записываются в файл, представленный именем-файла-4, неявной процедурой вывода для оператора MERGE (СЛИТЬ). В начале выполнения оператора MERGE (СЛИТЬ) файл, представленный именем-файла-4, не должен быть открыт. Для каждого файла, представленного именем-файла-4, выполнение оператором MERGE (СЛИТЬ) приводит к следующим действиям:
а) начинается обработка файла так, как будто выполнился оператор OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ);
б) сливаемые логические записи записываются в файл так, как будто выполнился оператор READ (ПИСАТЬ) без каких-либо необязательных фраз.
Для файла с относительной организацией относительный ключ первой пересылаемой записи содержит значение 1; второй пересылаемой записи - значение 2 и т.д. После выполнения оператора MERGE (СЛИТЬ) содержимое данного, указанного именем относительного ключа, указывает на последнюю запись, возвращенную в файл;
в) обработка файла завершается так, как будто выполнился оператор CLOSE (ЗАКРЫТЬ) без каких-либо необязательных фраз.
Эти неявные функции выполняются так, что будут выполняться связанные с ними процедуры USE AFTER EXCEPTION/ERROR (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), однако выполнение таких процедур USE (ИСПОЛЬЗОВАТЬ) не должно приводить к выполнению каких-либо операторов, ссылающихся на файл, представленный именем-файла-4, или область записи, соответствующую имени-файла-4. При первой попытке записи с нарушением внешне определенных границ файла выполняется указанная для файла процедура USE AFTER STANDARD EXCEPTION/ERROR (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ); если управление возвращается из процедуры USE (ИСПОЛЬЗОВАТЬ) или если такая процедура не указана, обработка файла завершается, как указано выше в п.11в.
(12) Если файл, представленный именем-файла-4, содержит только записи фиксированной длины, любая запись файла, представленного именем-файла-1, имеющая меньше позиций литер, чем значение фиксированной длины, дополняется пробелами слева направо, начиная с первой позиции литеры после последней литеры записи, когда эта запись возвращается в файл, представленный именем-файла-4.
(13) В программах, содержащих оператор MERGE (СЛИТЬ), может применяться сегментация, однако, имеют место следующие ограничения:
а) если оператор MERGE (СЛИТЬ) указан в секции, которая не является независимым сегментом, то любая процедура вывода, указанная оператором MERGE (СЛИТЬ), должна быть указана либо полностью вне независимых сегментов, либо целиком содержаться в одном независимом сегменте;
б) если оператор MERGE (СЛИТЬ) указан в независимом сегменте, то любая процедура вывода, на которую ссылается этот оператор, должна содержаться либо полностью вне независимых сегментов, либо целиком в пределах того же независимого сегмента, что и оператор MERGE (СЛИТЬ).
4.2. Оператор RELEASE (ПЕРЕДАТЬ)
4.2.1. Назначение
Оператор RELEASE (ПЕРЕДАТЬ) передает записи в начальную фазу операции сортировки.
4.2.2. Общий формат
RELEASE имя-записи-1 [FROM идентификатор-1]
ПЕРЕДАТЬ имя-записи-1 [ИЗ ПОЛЯ идентификатор-1]
4.2.3. Синтаксические правила
(1) Имя-записи-1 должно быть именем логической записи в соответствующей статье описания сортируемого или сливаемого файла и может уточняться.
(2) Оператор RELEASE (ПЕРЕДАТЬ) может использоваться только в пределах процедуры ввода, связанной с оператором SORT (СОРТИРОВАТЬ), для сортируемого или сливаемого файла, статья описания файла которого содержит это имя-записи-1.
(3) Имя-записи-1 и идентификатор-1 не должны ссылаться на одну и ту же область памяти.
4.2.4. Общие правила
(1) При выполнении оператора RELEASE (ПЕРЕДАТЬ) запись, указанная именем-записи-1, передается в начальную фазу операции сортировки.
(2) Логическая запись, переданная в результате выполнения оператора RELEASE (ПЕРЕДАТЬ), становится недоступной в области записи, если имя сортируемого или сливаемого файла, соответствующее имени-записи-1, не указано во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Логическая запись доступна программе как запись других файлов, представленных фразой SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), соответствующей выходному файлу так, как и запись файла, соответствующего имени-записи-1.
(3) Результат выполнения оператора RELEASE (ПЕРЕДАТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентен выполнению следующих операторов в указанном порядке:
а) оператор
MOVE идентификатор-1 ТО имя-записи-1
ПОМЕСТИТЬ идентификатор-1 В имя-записи-1 согласно правилам, указанным для оператора MOVE (ПОМЕСТИТЬ);
б) тот же оператор RELEASE (ПЕРЕДАТЬ) без фразы FROM (ИЗ ПОЛЯ).
(4) После завершения выполнения оператора RELEASE (ПЕРЕДАТЬ) информацию в области, представленной идентификатором-1, остается доступной, даже если недоступна информация в области, представленной именем-записи-1, за исключением случаев, определенных фразой SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ).
4.3. Оператор RETURN (ВЕРНУТЬ)
4.3.1. Назначение
Оператор RETURN (ВЕРНУТЬ) получает либо отсортированные записи в конечной фазе операции сортировки, либо объединенные в один файл записи, полученные при выполнении операции слияния.
4.3.2. Общий формат
RETURN имя-файла-1 RECORD [ INTO идентификатор-1] | ||
AT END повелительный-оператор-1 | ||
[ NOT AT END повелительный-оператор-2] | ||
[ END-RETURN ] | ||
ВЕРНУТЬ ЗАПИСЬ имя-файла-1 [В идентификатор-1] | ||
В КОНЦЕ повелительный-оператор-1 | ||
[ НЕ В КОНЦЕ повелительный-оператор-2] | ||
[ КОНЕЦ-ВЕРНУТЬ ] |
4.3.3. Синтаксические правила
(1) Область памяти, связанная с идентификатором-1, и область записи, связанная с именем-файла-1, не должны представлять одну и ту же область памяти.
(2) Имя-файла-1 должно быть описано в статье описания сортируемого-сливаемого файла в разделе данных.
(3) Оператор RETURN (ВЕРНУТЬ) может использоваться только в процедуре вывода, связанной с оператором SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ) для имени-файла-1.
4.3.4. Общие правила
(1) Если файл состоит из логических записей нескольких типов, то эти записи автоматически разделяют общую область записи в памяти; это равносильно неявному переопределению области. Значения любых данных, которые лежат вне текущей записи, по окончании выполнения оператора RETURN (ВЕРНУТЬ) не определены.
(2) В результате выполнения оператора RETURN (ВЕРНУТЬ) следующая существующая запись файла, представленного именем-файла-1, становится доступной для обработки в области, связанной с именем-файла-1, в порядке, определенном ключами, перечисленными в операторе MERGE (СЛИТЬ) или SORT (СОРТИРОВАТЬ). Если следующей логической записи в файле, представленном именем-файла-1, не существует, возникает условие конца, и управление передается повелительному-оператору-1 фразы AT END (В КОНЦЕ). Выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-1. Если выполняется оператор ветвления процедур или условный оператор, вызывающий явную передачу управления, оно передается согласно правилам для этого оператора; в противном случае после завершения выполнения повелительного-оператора-1 управление передается в точку выхода из оператора RETURN (ВЕРНУТЬ), а фраза NOT AT END (HE В КОНЦЕ), если указана, она игнорируется. При наступлении условия конца выполнение оператора RETURN (ВЕРНУТЬ) считается неуспешным и содержимое области записи, соответствующей имени-файла-1, не определено. Оператор RETURN (ВЕРНУТЬ) не может быть выполнен как часть текущей процедуры вывода после выполнения повелительного-оператора-1, указанного фразой AT END (В КОНЦЕ).
(3) Если при выполнении оператора RETURN (ВЕРНУТЬ) условие конца не возникает, то после того, как запись стала доступной, и после выполнения всех неявных пересылок, связанных с фразой INTO (В), управление передается повелительному-оператору-2, если он указан; в противном случае управление передается в точку выхода оператора RETURN (ВЕРНУТЬ).
(4) Фраза END-RETURN (КОНЕЦ-ВЕРНУТЬ) ограничивает область действия оператора RETURN (ВЕРНУТЬ) (см. ч.4, п.6.4.3).
(5) Фраза INTO (В) может быть указана в операторе RETURN (ВЕРНУТЬ) в следующих случаях:
а) если в статье описания сортируемого-сливаемого файла имеется только одно описание записи;
б) если все имена-записей, соответствующие имени-файла-1, и данное, представленное идентификатором-1, описывают групповое данное или элементарное буквенно-цифровое данное.
(6) результат выполнения оператора RETURN (ВЕРНУТЬ) с фразой INTO (В) эквивалентен выполнению следующих действий в указанном порядке:
а) выполнению того же оператора RETURN (ВЕРНУТЬ) без фразы INTO (В);
б) текущая запись перемещается из области записи в область, определенную идентификатором-1, согласно правилам для оператора MOVE (ПОМЕСТИТЬ) без фразы CORRESPONDING (СООТВЕТСТВЕННО). Размер текущей записи определяется правилами, указанными для фразы RECORD (В ЗАПИСИ). Если статья описания файла содержит фразу RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), пересылка является групповой. Неявный оператор MOVE (ПОМЕСТИТЬ) не выполняется, если выполнение оператора RETURN (ВЕРНУТЬ) было неуспешным. Индексы, относящиеся к идентификатору-1, вычисляются после чтения записи и непосредственно перед ее пересылкой в данное. Запись доступна как в области записи, так и в области данного, представленного идентификатором-1.
4.4. Оператор SORT (СОРТИРОВАТЬ)
4.4.1. Назначение
Оператор SORT (СОРТИРОВАТЬ) создает сортируемый файл, выполняя для этого процедуру ввода или перемещение записей из других файлов, сортирует записи в сортируемом файле по указанному набору ключей и в последней фазе операции сортировки делает доступной каждую запись из сортируемого файла в отсортированном порядке для указанной процедуры вывода или для выходного файла.
4.4.2. Общий формат
4.4.3. Синтаксические правила
(1) Оператор SORT (СОРТИРОВАТЬ) может указываться в любом месте раздела процедур, за исключением декларатив.
(2) Имя-файла-1 должно быть описано в статье описания сортируемого-сливаемого файла в разделе данных.
(3) Если указана фраза USING (ИСПОЛЬЗУЯ) и файл, представленный именем-файла-1, содержит записи переменной длины, размер записей, содержащихся в файле, представленном именем-файла-2, должен быть не меньше размера самой короткой и не больше размера самой длинной записи, описанной для имени-файла-1. Если файл, представленный именем-файла-1, содержит записи фиксированной длины, размер записей, содержащихся в файле, представленном именем-файла-2, должен быть не больше, чем размер самой длинной записи, описанной для файла, представленного именем-файла-1.
(4) Имя-данного-1 является именем ключа и подчиняется следующим правилам:
а) данные, представленные именами ключей, должны быть описаны в записях, соответствующих имени-файла-1;
б) имена ключей могут уточняться;
в) имена ключей не должны быть групповыми данными, содержащими переменно повторяющиеся данные;
г) если имя-файла-1 имеет более одного описания записи, то данные, указанные именами ключей, могут быть описаны только в одном из описаний записей. Одни и те же позиции литер, определяемые именем-ключа в одной статье описания записи, считаются ключом во всех записях файла;
д) описания ключей не должны содержать фразу OCCURS (ПОВТОРЯЕТСЯ) или быть подчиненными статьям, имеющим фразу OCCURS (ПОВТОРЯЕТСЯ);
е) если файл, представленный именем-файла-1, содержит записи переменной длины, все данные, представленные именами-ключей, должны содержаться в первых х позициях записи, где х равняется минимальному размеру записи, указанному для файла, представленного именем-файла-1.
(5) Слова THRU и THROUGH эквивалентны.
(6) Имя-файла-2 и имя-файла-3 должны быть описаны в разделе данных статьей описания файла, а не статьей описания сортируемого-сливаемого файла.
(7) Файлы, представленные именем-файла-2 и именем-файла-3, могут размещаться на одной и той же катушке.
(8) Если имя-файла-3 относится к индексному файлу, первое указание имени-данного-1 должно быть связано с фразой ASCENDING (ПО ВОЗРАСТАНИЮ), а данное, представленное именем-данного-1, должно занимать те же позиции литер в записи, что и данное, соответствующее основному ключу записи для этого файла.
(9) В одной и той же фразе SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ) или SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ) не могут быть указаны никакие два имени-файла, используемые в одном и том же операторе SORT (СОРТИРОВАТЬ). Имена-файлов, соответствующие фразе GIVING (ПОЛУЧАЯ), не могут указываться в одной и той же фразе SAME (ОБЩАЯ) (см. ч.7, п.2.13 и п.2.5 настоящей части).
(10) Если указана фраза GIVING (ПОЛУЧАЯ) и файл, представленный именем-файла-3, содержит записи переменной длины, размер записей, содержащихся в файле, представленном именем-файла-1, должен быть не меньше размера самой короткой и не больше размера самой длинной записи, описанной для имени-файла-3. Если файл, представленный именем-файла-3, содержит записи фиксированной длины, размер записей, содержащихся в файле, представленном именем-файла-1, должен быть не больше самой длинной записи, описанной для файла, представленного именем-файла-3.
4.4.4. Общие правила
(1) Если файл, представленный именем-файла-1, содержит только записи фиксированной длины, любая запись файла, представленного именем-файла-2, содержащая меньше позиций литер, чем запись фиксированной длины, при передаче в файл, представленный именем-файла-1, дополняется пробелами справа, начиная с первой позиции литеры после последней литеры записи.
(2) Имена-данных, указанные в качестве ключей, перечисляются в операторе SORT (СОРТИРОВАТЬ) в порядке убывания значимости. Самое левое имя-данного-1 - самый главный ключ, следующее имя-данного-2 - следующий по значимости ключ и так далее.
а) Если определена фраза ASCENDING (ПО ВОЗРАСТАНИЮ), то отсортированная последовательность будет сформирована, начиная с наименьшего значения данных, указанных в качестве ключей, и кончая наибольшим значением в соответствии с правилами сравнения операндов в условиях отношения.
б) Если указана фраза DESCENDING (ПО УБЫВАНИЮ), то отсортированная последовательность будет сформирована, начиная с наибольшего значения данных, указанных в качестве ключей, и кончая наименьшим значением в соответствии с правилами сравнения операндов.
(3) Если указана фраза DUPLICATES (С ДУБЛИРОВАНИЕМ) и содержимое всех ключей, связанных с одной записью данных, равно содержимому соответствующих ключей, связанных с одной или несколькими другими записями данных, то порядок возврата этих записей следующий:
а) совпадает с порядком указания входных файлов в операторе SORT (СОРТИРОВАТЬ). В заданном входном файле порядок записей совпадает с порядком получения записей из этого файла;
б) если указана процедура ввода, порядок записей совпадает с порядком, в котором эти записи поступают из процедуры ввода.
(4) Если фраза DUPLICATES (С ДУБЛИРОВАНИЕМ) не указана, и содержимое всех ключей, связанных с одной записью данных, равно содержимому соответствующих ключей, связанных с одной или несколькими другими записями данных, то порядок возвращения этих записей не определен.
(5) Основная последовательность при сравнении нечисловых данных, являющихся ключами, определяется в начале выполнения оператора SORT (СОРТИРОВАТЬ) в следующем порядке старшинства:
а) во-первых, основная последовательность, установленная фразой COLLATING SEQUENCE (АЛФАВИТ) в операторе SORT (СОРТИРОВАТЬ), если эта фраза определена;
б) во-вторых, основная последовательность, установленная как программный алфавит.
(6) Выполнение оператора SORT (СОРТИРОВАТЬ) состоит из следующих трех этапов:
а) записи становятся доступными файлу, представленному именем-файла-1, либо благодаря выполнению оператора RELEASE (ПЕРЕДАТЬ) в процедуре ввода, либо благодаря неявному выполнению оператора READ (ЧИТАТЬ) для имени-файла-2. Перед началом этой фазы файл, представленный именем-файла-2, не должен быть открыт. После окончания этой фазы файл, представленный именем-файла-2, не является открытым;
б) файл, представленный именем-файла-1, упорядочивается. На протяжении этого этапа файлы, представленные именем-файла-2 и именем-файла-3, не подвергаются никакой обработке;
в) записи файла, представленного именем-файла-1, становятся доступными в отсортированном виде. Отсортированные записи либо записываются в файл, представленный именем-файла-3, либо становятся доступными для обработки в результате выполнения оператора RETURN (ВЕРНУТЬ) в процедуре вывода. В начале этой фазы файл, представленный именем-файла-3, не должен быть открыт. После окончания это файл, представленный именем-файла-3, не является открытым.
(7) Процедура ввода может состоять из любой процедуры выборки, модификации или копирования записей, которые становятся доступными посредством оператора RELEASE (ПЕРЕДАТЬ) для файла, представленного именем-файла-1. Область действия такой процедуры включает все операторы, выполняющиеся в результате передачи управления по операторам CALL (ВЫЗВАТЬ), EXIT (ВЫЙТИ), GO ТО (ПЕРЕЙТИ) и PERFORM (ВЫПОЛНИТЬ), находящимся в области действия процедуры ввода, а также все операторы декларативных процедур, выполняющихся в результате выполнения операторов, находящихся в области действия процедуры ввода. В области действия процедуры ввода не должны выполняться операторы MERGE (СЛИТЬ), RETURN (ВЕРНУТЬ) или SORT (СОРТИРОВАТЬ) (см. ч.4, п.4.4).
(8) Если процедура ввода определена, то управление передается ей до того как файл, представленный именем-файла-1, будет упорядочен оператором SORT (СОРТИРОВАТЬ). Компилятор встраивает механизм возврата в конец последнего оператора процедуры ввода. Когда управление достигает последнего оператора в процедуре ввода, то записи, которые были переданы для файла, представленного именем-файла-1, сортируются.
(9) Если указана фраза USING (ИСПОЛЬЗУЯ), все записи файла (файлов), представленных именем-файла-2, передаются файлу, представленному именем-файла-1. Для каждого файла, представленного именем-файла-2, выполнение оператора SORT (СОРТИРОВАТЬ) приводит к следующим действиям:
а) инициируется обработка файла, которая происходит так, как будто выполняется оператор OPEN (ОТКРЫТЬ) с фразой INPUT (ВХОДНОЙ);
б) логические записи извлекаются и передаются операции сортировки, причем каждая запись извлекается так, как если бы выполнился оператор READ (ЧИТАТЬ) с фразами NEXT (СЛЕДУЮЩУЮ) и AT END (В КОНЦЕ). Для файла с относительной организацией, не указанного именем-файла-2 во фразе GIVING (ПОЛУЧАЯ), значение данного, являющегося относительным ключом, после выполнения оператора SORT (СОРТИРОВАТЬ) не определено;
в) обработка файла завершается так, как если бы был выполнен оператор CLOSE (ЗАКРЫТЬ) без каких-либо необязательных фраз. Это завершение выполняется до сортировки файла, представленного именем-файла-1 в операторе SORT (СОРТИРОВАТЬ).
Эти неявные функции выполняются таким образом, что выполняются и соответствующие процедуры USE AFTER EXCEPTION/ERROR (ИСПОЛЬЗОВАТЬ ПОСЛЕ ОШИБКИ); однако исполнение таких процедур не должно приводить к выполнению каких-либо операторов, обрабатывающих файл, представленный именем-файла-2, либо осуществляющих доступ к области записи, соответствующей имени-файла-2.
(10) Процедура вывода может состоять из любых процедур выборки, модификации или копирования записей, которые поочередно становятся доступными в отсортированном порядке из файла, представленного именем-файла-1 посредством оператора RETURN (ВЕРНУТЬ). Область действия таких процедур включает все операторы, выполняющиеся в результате передачи управления по операторам CALL (ВЫЗВАТЬ), EXIT (ВЫЙТИ), GO TO (ПЕРЕЙТИ) и PERFORM (ВЫПОЛНИТЬ) в области действия процедуры вывода, а также все операторы декларативных процедур, выполняющихся в результате выполнения операторов, находящихся в области действия процедуры вывода. В области действия процедуры вывода не должны находиться операторы MERGE (СЛИТЬ), RELEASE (ПЕРЕДАТЬ), SORT (СОРТИРОВАТЬ) (см. ч.4, п.4.4).
(11) Если процедура вывода определена, то управление передается ей после упорядочения файла, представленного именем-файла-1, оператором SORT (СОРТИРОВАТЬ). Компилятор встраивает механизм возврата в конец последнего оператора процедуры вывода, и когда управление достигает последнего оператора процедуры вывода, механизм возврата обеспечивает завершение сортировки, и затем управление передается следующему после оператора SORT (СОРТИРОВАТЬ) выполнимому оператору. Процедура вывода получает управление, когда все записи отсортированы. Операторы RETURN (ВЕРНУТЬ) в процедуре вывода являются запросами на получение следующей записи.
(12) Если указана фраза GIVING (ПОЛУЧАЯ), выполняется неявная процедура вывода, в результате которой все отсортированные записи записываются в файл, представленный именем-файла-3. Для всех файлов, представленных именем-файла-3, выполнение оператора SORT (СОРТИРОВАТЬ) приводит к следующим действиям:
а) обработка файла инициируется так, как будто бы выполнен оператор OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ). Эта инициация выполняется после выполнения всех процедур ввода;
б) отсортированные логические записи возвращаются и записываются в файл так, как будто выполняется оператор WRITE (ПИСАТЬ) без каких-либо необязательных фраз; для файла с относительной организацией данное, являющееся относительным ключом, для первой возвращенной записи принимает значение 1, для второй - значение 2 и т.д.
После выполнения оператора SORT (СОРТИРОВАТЬ) содержимое данного, являющегося относительным ключом, указывает на последнюю возвращенную в файл запись;
в) обработка файла завершается так, как будто был выполнен оператор CLOSE (ЗАКРЫТЬ) без каких-либо необязательных фраз.
Эти неявные функции выполняются так, что выполняются и соответствующие процедуры USE AFTER EXCEPTION/ERROR (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), однако исполнение таких процедур не должно приводить к выполнению каких-либо операторов, обрабатывающих файл, представленный именем-файла-3, либо осуществляющих доступ к области записи, соответствующей имени-файла-3. При первой попытке записи за пределами внешне определенных границ выполняется процедура USE AFTER STANDARD EXCEPTION/ERROR (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), указанная для файла; если управление возвращается из такой процедуры или такая процедура не указана, обработка файла завершается, как указано выше в п.12в.
(13) Если файл, представленный именем-файла-3, содержит только записи фиксированной длины, записи файла, представленного именем-файла-1, содержащие меньше позиций литер, чем запись фиксированной длины, при возвращении записи в файл, представленный именем-файла-3, дополняются пробелами справа, начиная с первой позиции литеры после последней литеры в записи.
(14) В программах, содержащих оператор SORT (СОРТИРОВАТЬ), может применяться сегментация (ч.16). Однако имеют место следующие ограничения:
а) если оператор SORT (СОРТИРОВАТЬ) указан в секции, которая не является независимым сегментом, то любые процедуры ввода или вывода, указанные оператором SORT (СОРТИРОВАТЬ), должны быть указаны либо вне независимых сегментов, либо целиком содержаться в одном независимом сегменте;
б) если оператор SORT (СОРТИРОВАТЬ) указан в независимом сегменте, то любые процедуры ввода или вывода, на которые ссылается оператор SORT (СОРТИРОВАТЬ), должны содержаться либо полностью вне независимых сегментов, либо целиком в том же независимом сегменте, что и оператор SORT (СОРТИРОВАТЬ).
Часть 12. МОДУЛЬ ОБРАБОТКИ ИСХОДНЫХ ТЕКСТОВ
1. ВВЕДЕНИЕ В МОДУЛЬ ОБРАБОТКИ ИСХОДНЫХ ТЕКСТОВ
1.1. Назначение
Модуль обработки исходных текстов содержит оператор COPY (КОПИРОВАТЬ)
Тексты, которые становятся доступными компилятору во время компиляции, содержатся в библиотеках Кобола. Эффект интерпретации оператора COPY (КОПИРОВАТЬ) состоит в генерации текста из библиотечного текста, который рассматривается компилятором как часть исходной программы.
1.2. Характеристика уровней
Уровень 1 обработки исходных текстов обеспечивает возможность копирования в исходную программу текста из единственной библиотеки. Текст копируется из библиотеки без изменений.
Уровень 2 обработки исходных текстов обеспечивает дополнительную возможность замены в процессе копирования всех появлений указанного литерала, идентификатора, слова или группы слов в библиотечном тексте другим текстом. Уровень 2 обеспечивает также возможности использования во время компиляции нескольких библиотек Кобола и замены текста, появляющегося в исходной программе, новым текстом. |
2. ОПЕРАТОР COPY (КОПИРОВАТЬ)
2.1. Назначение
Оператор COPY (КОПИРОВАТЬ) включает текст в исходную программу Кобола.
2.2. Общий формат
2.3. Синтаксические правила
В одной библиотеке Кобола каждое имя-текста должно быть уникальным (однозначным).
(2) Оператору COPY (КОПИРОВАТЬ) должен предшествовать пробел. Оператор COPY (КОПИРОВАТЬ) должен заканчиваться разделителем точка.
(3) Псевдотекст-1 должен содержать одно или несколько слов текста. (4) Псевдотекст-2 может содержать одно или несколько слов текста или не содержать слов текста. |
(5) Строка-литер в псевдотексте-1 и псевдотексте-2 может быть продолжена на следующей строке (см. ч.4, п.7.2.5). (6) Слово-1 и слово-2 могут быть любым одиночным словом Кобола, кроме COPY (КОПИРОВАТЬ). |
(7) Оператор COPY (КОПИРОВАТЬ) может быть указан в исходной программе всюду, где может появиться строка-литер или разделитель, отличный от закрывающего знака "кавычки", за исключением самого оператора COPY (КОПИРОВАТЬ), внутри которого оператор COPY (КОПИРОВАТЬ) не может появляться.
(8) Реализация должна допускать длину слова текста от 1 до 322 литер в
(9) Псевдотекст-1 не должен состоять только из разделителя запятая или разделителя точка с запятой. |
(10) Если слово COPY (КОПИРОВАТЬ) появляется в статье-комментарии или в том месте, где статья-комментарий может появиться, оно рассматривается как часть статьи-комментария.
2.4. Общие правила
(1) Компиляция исходной программы, содержащей операторы COPY (КОПИРОВАТЬ), логически эквивалентна обработке всех операторов COPY (КОПИРОВАТЬ) до обработки результирующей исходной программы.
(2) Эффект обработки оператора COPY (КОПИРОВАТЬ) состоит в том, что библиотечный текст, связанный с именем-текста-1, копируется в исходную программу, логически заменяя весь оператор COPY (КОПИРОВАТЬ), начиная с зарезервированного слова COPY (КОПИРОВАТЬ) и кончая литерой пунктуации точка включительно.
(3)
Если вариант указан, библиотечный текст копируется и каждое сравнившееся вхождение псевдотекста-1, идентификатора-1, слова-1 или литерала-1 в библиотечном тексте заменяется соответствующим псевдотекстом-2, идентификатором-2, словом-2 или литералом-2. (4) Для целей сравнения идентификатор-1, слово-1 и литерал-1 рассматриваются как псевдотекст, содержащий, соответственно, только идентификатор-1, слово-1 или литерал-1. (5) Операция сравнения для определения замены текста выполняется следующим образом. Самое левое слово библиотечного текста, которое не является разделителем запятая или разделителем точка с запятой, является первым словом текста, используемым для сравнения. Любое слово текста или пробел, предшествующий этому слову текста, копируется в исходную программу. Начиная с первого слова текста, выбранного для сравнения, и первого псевдотекста-1, идентификатора-1, слова-1 или литерала-1, который был указан в варианте REPLACING (ЗАМЕНЯЯ) весь операнд варианта REPLACING (ЗАМЕНЯЯ), который предшествует слову BY (НА), сравнивается с эквивалентным количеством последовательных слов библиотечного текста. | |
Псевдотекст-1, идентификатор-1, слово-1 или литерал-1 совпадают с библиотечным текстом тогда и только тогда, когда упорядоченная последовательность слов текста, которые образуют псевдотекст-1, идентификатор-1, слово-1 или литерал-1, равна символ за символом упорядоченной последовательности слов библиотечного текста. При сопоставлении каждое вхождение разделителя запятая, точка с запятой или пробел в псевдотексте-1 или в библиотечном тексте рассматривается как один пробел. Любая последовательность из одного или нескольких разделителей пробел рассматривается как один пробел. Если совпадение не имеет места, сравнение повторяется с каждым следующим последовательным псевдотекстом-1, идентификатором-1, словом-1 или литералом-1, если они указаны, в варианте REPLACING (ЗАМЕНЯЯ), до тех пор пока не будет обнаружено совпадение или не останется ни одного следующего последовательного операнда REPLACING (ЗАМЕНЯЯ). Если все операнды варианта REPLACING (ЗАМЕНЯЯ) сравнивались и совпадение не произошло, самое левое слово библиотечного текста копируется в исходную программу. Следующее последовательное слово библиотечного текста рассматривается как самое левое слово библиотечного текста и снова начинается цикл сравнения с первым псевдотекстом-1, идентификатором-1, словом-1 или литералом-1, указанным в варианте REPLACING (ЗАМЕНЯЯ). Если происходит совпадение псевдотекста-1, идентификатора-1, слова-1 или литерала-1 с библиотечным текстом, соответствующий псевдотекст-2, идентификатор-2, слово-2 или литерал-2 помещаются в исходную программу. Слово библиотечного текста, непосредственно следующее за самым правым словом текста, которое участвовало в сравнении, рассматривается теперь как самое левое слово текста. Снова начинается цикл сравнения с первым псевдотекстом-1, идентификатором-1, словом-1 или литералом-1, указанным в варианте REPLACING (ЗАМЕНЯЯ). Операция сравнения продолжается до тех пор, пока самое правое слово текста в библиотечном тексте или участвовало в успешном сравнении или было рассмотрено в качестве самого левого слова библиотечного текста и участвовало в полном цикле сравнения. | |
(8) Синтаксическая правильность библиотечного текста не может быть установлена независимо. Синтаксическая правильность всей исходной программы Кобола, за исключением операторов COPY (КОПИРОВАТЬ)
Библиотечный текст должен соответствовать правилам формата представления Кобола.
3. ОПЕРАТОР REPLACE (ЗАМЕНИТЬ) 3.1. Назначение Оператор REPLACE (ЗАМЕНИТЬ) используется для замены текста исходной программы. 3.2. Общий формат Формат 1 |
3.3. Синтаксические правила (1) Оператор REPLACE (ЗАМЕНИТЬ) может появиться в исходной программе всюду, где может появиться строка-литер. Ему должен предшествовать разделитель точка, кроме случая, когда он является первым оператором отдельно компилируемой программы. (2) Оператор REPLACE (ЗАМЕНИТЬ) должен заканчиваться разделителем точка. (3) Псевдотекст-1 должен содержать одно или несколько слов текста. (4) Псевдотекст-2 может содержать одно или несколько слов текста или не содержать ни одного слова текста. (5) Строка-литер в псевдотексте-1 и псевдотексте-2 может быть продолжена (см. ч.4, п.7.2.5). (6) Реализация должна допускать слова текста в псевдотексте длиной от 1 до 322 литер. (7) Псевдотекст-1 не должен состоять только из разделителя запятая или разделителя точка с запятой. (8) Если слово REPLACE (ЗАМЕНИТЬ) появляется в статье-комментарии или в месте, где может появиться статья-комментарий, оно рассматривается как часть статьи-комментария. |
3.4. Общие правила (1) Формат 1 оператора REPLACE (ЗАМЕНИТЬ) определяет текст исходной программы, который должен быть заменен соответствующим текстом. Каждое совпадающее появление псевдотекста-1 в исходной программе заменяется соответствующим псевдотекстом-2. (2) Формат 2 оператора REPLACE (ЗАМЕНИТЬ) указывает, что все действующие в настоящий момент замены текста отменяются. (3) Данное появление оператора REPLACE (ЗАМЕНИТЬ) находится в действии от точки, в которой оно указано, до следующего появления оператора или конца отдельно компилируемой программы соответственно. (4) Все операторы REPLACE (ЗАМЕНИТЬ), находящиеся в исходной программе, обрабатываются после того, как будут обработаны все операторы COPY (КОПИРОВАТЬ), находящиеся в исходной программе. (5) Текст, создаваемый в результате обработки оператора REPLACE (ЗАМЕНИТЬ), не должен содержать оператор REPLACE (ЗАМЕНИТЬ). (6) Операция сравнения для определения замены текста выполняется следующим образом: а) псевдотекст-1 сравнивается с эквивалентным количеством смежных слов текста исходной программы, начиная с самого левого слова текста исходной программы и первого псевдотекста-1; б) псевдотекст-1 совпадает с исходным текстом тогда и только тогда, когда упорядоченная последовательность слов текста которая образует псевдотекст-1, равна символ за символом упорядоченной последовательности слов текста исходной программы. При сопоставлении каждое вхождение разделителя запятая, точка с запятой или пробел в псевдотексте-1 или в тексте исходной программы рассматривается как один пробел. Любая последовательность из одного или нескольких разделителей пробел рассматриваются как один пробел; |
в) если совпадение не имеет места, сравнение повторяется для каждого следующего последовательного вхождения псевдотекста-1 до тех пор, пока не будет обнаружено совпадение или не останется ни одного следующего последовательного вхождения псевдотекста-1. |
г) когда все вхождения псевдотекста-1 сравнивались и совпадение не произошло, следующее последовательное слово текста исходной программы рассматривается как самое левое слово текста исходной программы и снова повторяется цикл сравнения, начиная с первого вхождения псевдотекста-1; |
д) если происходит совпадение псевдотекста-1 и текста исходной программы, соответствующий псевдотекст-2 заменяет совпавший текст в исходной программе. Слово текста исходной программы, непосредственно следующее за самым правым словом текста, которое участвовало в сравнении, рассматривается теперь как самое левое слово текста исходной программы. Цикл сравнения снова начинается с первого вхождения псевдотекста-1; |
е) операция сравнения продолжается до тех пор, пока самое правое слово текста в тексте исходной программы, которое принадлежит области действия оператора REPLACE (ЗАМЕНИТЬ), или участвовало в успешном сравнении, или было рассмотрено в качестве самого левого слова текста исходной программы и участвовало в полном цикле сравнения. |
(7) Строки комментариев и пустые строки, появляющиеся в тексте исходной программы и в псевдотексте-1, при сопоставлении игнорируются; следование слов текста в тексте исходной программы и псевдотекста-1 определяется правилами формата представления (см. ч.4, п.7.2). |
Строки комментариев и пустые строки в псевдотексте-2 помещаются в результирующую программу без изменения всякий раз, когда псевдотекст-2 помещается в исходную программу в результате замены текста. Строка комментария и пустая строка в тексте исходной программы не заменяется, если эта строка комментария или пустая строка появляется внутри последовательности слов текста, которые совпадают с псевдотекстом-1. (8) В псевдотексте допускаются отладочные строки. Слова текста в отладочной строке участвуют в правилах сравнения, как если бы D (Т) не появлялось в поле индикатора. (9) Синтаксическая правильность текста исходной программы, за исключением операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ), не может быть установлена до тех пор, пока не будут полностью обработаны все операторы COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ). (10) Слова текста, вводимые в исходную программу в результате обработки оператора REPLACE (ЗАМЕНИТЬ), помещаются в исходную программу в соответствии с правилами формата представления (см. ч.4, п.7). Когда слова текста из псевдотекста-2 вводятся в исходную программу, дополнительные пробелы могут быть введены только между словами текста, где уже имеется пробел (включая подразумеваемый пробел между исходными строками). (11) Если в исходную программу в результате обработки операторов REPLACE (ЗАМЕНИТЬ) вводятся дополнительные строки, поле индикатора вводимой строки содержит такую же литеру, как строка, на которой начинается текст, подлежащий замене, за исключением случая, когда эта же строка содержит дефис; в этом случае вводимая строка содержит пробел. Если какой-нибудь литерал в псевдотексте-2 является слишком длинным и не может вместиться в одной строке без переноса на другую строку в результирующей программе и литерал не должен размещаться в отладочной строке, вводятся дополнительные строки продолжения, которые содержат остаток литерала. Если замена требует, чтобы продолжаемый литерал был продолжен в отладочной строке, в программе имеется ошибка. |
Часть 13. МОДУЛЬ ГЕНЕРАТОРА ОТЧЕТОВ
1. ВВЕДЕНИЕ В МОДУЛЬ ГЕНЕРАТОРА ОТЧЕТОВ
1.1. Назначение
Модуль генератора отчетов обеспечивает средства составления отчетов посредством определения физического представления отчета, не требуя, по возможности, задания необходимых для этого процедур.
Для определения логической организации отчета использована иерархия уровней. Каждый отчет подразделяется на группы отчета, которые, в свою очередь, подразделяются на последовательности данных. Такая иерархическая структура делает возможными явные ссылки на отдельные группы отчета наряду с неявными ссылками на другие уровни иерархии. Группа отчета содержит одно или несколько данных, которые располагаются на одной или нескольких строках.
1.2. Понятия языка
1.2.1. Файл отчетов
Файл отчетов - это выходной файл с последовательной организацией, имеющий статью описания файла, содержащую фразу REPORT (ОТЧЕТ). Содержимое файла отчетов состоит из записей, которые будут записываться в файл под управлением системы управления генератором отчетов (СУГО).
Файл отчетов именуется в статье управления файлом и описывается статьей описания файла, содержащей фразу REPORT (ОТЧЕТ) Доступ к файлу отчетов обеспечивается операторами OPEN (ОТКРЫТЬ), GENERATE (ГЕНЕРИРОВАТЬ), INITIATE (НАЧАТЬ), SUPPRESS (ПОДАВИТЬ), TERMINATE (ЗАКОНЧИТЬ), USE AFTER STANDARD EXCEPTION PROCEDURE (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) и CLOSE (ЗАКРЫТЬ).
1.2.2. Специальный регистр PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ)
Зарезервированное слово PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) служит именем счетчика страниц, который генерируется для каждой статьи описания отчета, определенной в секции отчетов раздела данных. Неявное описание счетчика соответствует описанию целого без знака в диапазоне значений от 1 до 999999, а его использование определяется реализацией. Значение PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) обеспечивается СУГО и используется программой для нумерации страниц отчета. На PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) можно ссылаться только во фразе SOURCE (ИСТОЧНИК) в секции отчетов и в операторах раздела процедур (п.3.5.5 настоящей части).
1.2.3. Специальный регистр LINE-COUNTER (СЧЕТЧИК-СТРОК)
Зарезервированное слово LINE-COUNTER (СЧЕТЧИК-СТРОК) является именем счетчика строк, порождаемого для каждой статьи описания отчета, определенной в секции отчетов раздела данных. Этот счетчик неявно описан как целое без знака в диапазоне значений от 0 до 999999, а его использование определяется реализацией. Значение LINE-COUNTER (СЧЕТЧИК-СТРОК) обеспечивается системой управления генератором отчетов и используется для определения вертикального расположения отчета.
На LINE-COUNTER (СЧЕТЧИК-СТРОК) можно ссылаться только во фразе SOURCE (ИСТОЧНИК) в секции отчетов и в операторах раздела процедур; однако изменять значение LINE-COUNTER (СЧЕТЧИК-СТРОК) может только система управления генератором отчетов (СУГО) (п.3.5.6 настоящей части).
1.2.4. Индексирование
Счетчики сумм и специальные регистры LINE-COUNTER (СЧЕТЧИК-СТРОК) и PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) не могут быть использованы в качестве индексов в секции отчетов.
2. РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ ГЕНЕРАТОРА ОТЧЕТОВ
2.1. Секция ввода-вывода
Информация, относящаяся к секции ввода-вывода, находится в ч.7, п.2.1.
2.2. Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ)
Информация, относящаяся к параграфу FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) находится в ч.7, п.2.2.
2.3. Статья управления файлом
2.3.1. Назначение
Статья управления файлом объявляет соответствующие физические атрибуты файла отчетов.
2.3.2. Общий формат
2.3.3. Синтаксические правила
(1) Фраза SELECT (ДЛЯ) должна быть первой в статье управления файлом. Следующие за ней фразы могут появляться в любом порядке.
(2) Каждый файл отчетов, описанный в разделе данных, должен определяться только один раз в параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ). Каждый файл отчетов, определенный фразой SELECT (ДЛЯ), должен иметь в разделе данных этой же программы статью описания файла, содержащую фразу REPORT (ОТЧЕТ).
(3) Литерал-1 должен быть нечисловым литералом и не должен быть стандартной константой. Смысл и правила для допустимого содержимого имени-реализации-1 и значения литерала-1 определяются реализацией.
(4) Допустимость отдельных фраз в статье управления файлом для файла отчетов зависит от уровня модуля последовательного ввода-вывода, поддерживаемого реализацией (см. ч.7, п.2.2).
2.3.4. Общие правила
(1) Если определитель файла, на который ссылается имя-файла-1, является внешним определителем файла (см. ч.10, п.4.5), все статьи управления файлом, ссылающиеся на этот определитель файла, в единице исполнения должны иметь:
а) одну и ту же спецификацию фразы OPTIONAL (НЕОБЯЗАТЕЛЬНОГО);
б) согласующуюся спецификацию для имени-реализации-1 или литерала-1 во фразе ASSIGN (НАЗНАЧИТЬ). Реализация определяет правила согласования для имени-реализации-1 или литерала-1;
в) согласующуюся спецификацию для имени-реализации-2 во фразе RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ). Реализация определяет правила согласования для имени-реализации-2;
г) одно и то же значение целого-1 во фразе RESERVE (РЕЗЕРВИРОВАТЬ);
д) одну и ту же организацию;
е) один и тот же метод доступа;
ж) одну и ту же спецификацию для фразы PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ).
(2) Фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) применяется только к файлу отчетов, открытому в режиме дополнения. Ее спецификация требуется только для файла отчетов, наличие которого необязательно во время каждого выполнения объектной программы.
(3) Фраза ASSIGN (НАЗНАЧИТЬ) определяет связь между файлом отчетов, на который ссылается имя-файла-1, и запоминающей средой, на которую ссылается имя-реализации-1 или литерал-1.
(4) Файл отчетов имеет последовательную организацию. Таким образом все фразы статьи управления файлом для файла отчетов в общем формате п.2.3.2 настоящей части относятся к модулю последовательного ввода-вывода (см. ч.7, п.2.3.2).
2.4. Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ)
2.4.1. Назначение
Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ.) определяет область памяти, которая будет использоваться различными файлами, и размещение нескольких файлов на одной катушке.
2.4.2. Общий формат
2.4.3 Синтаксические правила
(1) Порядок появления фраз несущественен.
(2) Имя-файла, представляющее файл отчетов, может появляться во фразах MULTIPLE FILE ТАРЕ (НА ОДНОЙ КАТУШКЕ) или SAME (ОБЩАЯ), для которой не указан вариант RECORD (ЗАПИСИ).
(3) Допустимость отдельных фраз в параграфе I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) для файла отчетов зависит от уровня модуля последовательного ввода-вывода, поддерживаемого реализацией (см. ч.7, п.2.10).
2.4.4. Общие правила
(1) Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) приведена в ч.7, п.2.11.
(2) Фраза SAME (ОБЩАЯ) приведена в ч.7, п.2.13.
3. РАЗДЕЛ ДАННЫХ В МОДУЛЕ ГЕНЕРАТОРА ОТЧЕТОВ
3.1. Секция файлов
Секция файлов находится в разделе данных исходной программы. Секция файлов определяет структуру файлов отчетов. Каждый файл отчетов определяется статьей описания файла, содержащей фразу REPORT (ОТЧЕТ). За статьей описания файла для файла отчетов не следуют статьи описания записи.
Общий формат секции файлов в модуле генератора отчетов приведен ниже.
FILE SECTION. | ||
[статья-описания-файла-отчетов]... | ||
СЕКЦИЯ ФАЙЛОВ. | ||
[статья-описания-файла-отчетов] ... |
В Кобол-программе статья описания файла (статья FD (ОФ)) представляет наивысший уровень организации в секции файлов. За заголовком секции файлов следует статья описания файла, состоящая из индикатора уровня FD (ОФ), имени-файла и ряда независимых фраз. Для файла отчетов статья описания файла должна содержать фразу REPORT (ОТЧЕТ), определяющую имена отчетов, заносимых в файл отчетов. За статьей описания файла для файла отчетов не могут следовать никакие статьи описания записей.
3.2. Статья описания файла
3.2.1. Назначение
Статья описания файла предоставляет информацию о физической структуре, идентификации и именах-отчетов, относящихся к файлу отчетов.
3.2.2. Общий формат
3.2.3. Синтаксические правила
(1) Индикатор уровня FD (ОФ) определяет начало статьи описания файла и должен предшествовать имени файла отчетов.
(2) Фразы, которые следуют за именем-файла-1, могут появляться в любом порядке.
(3) Имя-файла-1 может относиться только к последовательному файлу.
(4) За статьей описания файла для файла отчетов не могут следовать статьи описания записей.
(5) На субъект статьи описания файла, определяющей фразу REPORT (ОТЧЕТ), можно ссылаться в разделе процедур только в операторах USE (ИСПОЛЬЗОВАТЬ), CLOSE (ЗАКРЫТЬ) или OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ).
(6) Допустимость отдельных фраз в такой статье описания файла зависит от уровня модуля последовательного ввода-вывода, поддерживаемого реализацией (см. ч.7, п.3.2).
3.2.4. Общие правила
(1) Статья описания файла связывает имя-файла-1 с определителем файла.
(2) Структура логической записи файла, связанного с именем-файла-1, определяется реализацией.
(3) Все фразы статьи описания файла в п.3.2 для файла отчетов, за исключением фразы REPORT (ОТЧЕТ), описаны в модуле последовательного ввода-вывода (см. ч.7, п.3.2).
(4) Фраза REPORT (QT4ET) представлена в п.3.3 настоящей части.
3.3. Фраза REPORT (ОТЧЕТ)
3.3.1. Назначение
Фраза REPORT (ОТЧЕТ) указывает имена отчетов, образующих файл отчетов.
3.3.2. Общий формат
3.3.3. Синтаксические правила
(1) Каждое имя-отчета, указанное во фразе REPORT (ОТЧЕТ), должно быть субъектом статьи описания отчета в секции отчетов. Порядок появления имен-отчетов во фразе не существенен.
(2) Каждое имя-отчета может появляться только в одной фразе REPORT (ОТЧЕТ).
(3) На субъект статьи описания файла, содержащей фразу REPORT (ОТЧЕТ), можно ссылаться в разделе процедур только в операторах USE (ИСПОЛЬЗОВАТЬ), CLOSE (ЗАКРЫТЬ) или OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ).
3.3.4. Общие правила
(1) Присутствие нескольких имен-отчетов во фразе REPORT (ОТЧЕТ) указывает, что файл содержит несколько отчетов.
(2) После выполнения оператора INITIATE (НАЧАТЬ) и до выполнения оператора TERMINATE (ЗАКОНЧИТЬ) для одного и того же файла отчетов файл отчетов находится под управлением системы управления генератором отчетов. Когда файл отчетов находится под управлением СУГО, никакой оператор ввода-вывода, ссылающийся на этот файл отчетов, не может выполняться.
(3) Если соответствующий определитель файла является внешним определителем файла, каждая статья описания файла в единице исполнения, связанная с этим определителем файла, должна описывать файл как файл отчетов.
3.4. Секция отчетов
Секция отчетов располагается в разделе данных исходной программы. Секция отчетов описывает отчеты, которые будут записаны в файл отчетов. Описание каждого отчета должно начинаться статьей описания отчета (статьей RD (OO)), за которой следуют одна или несколько статей описания групп отчета.
Ниже приводится общий формат секции отчетов.
REPORT SECTION. | ||
[статья-описания-отчета | ||
СЕКЦИЯ ОТЧЕТОВ. | ||
[статья-описаиия-отчета |
3.4.1. Статья описания отчета
Статья описания отчета (статья RD (OO)) определяет имя отчета, формат каждой страницы отчета, указывая вертикальные границы поля страницы, в котором может быть отпечатан каждый тип группы отчета. Статья описания отчета также указывает управляющие данные. При составлении отчета изменения значений управляющих данных приводят к порождению групп отчета, называемых управляемыми группами.
Каждый отчет, названный во фразе REPORT (ОТЧЕТ) статьи описания файла в секции файлов, должен быть субъектом статьи описания отчета в секции отчетов. Более того, каждый отчет в секции отчетов должен быть назван только в одной статье описания файла.
3.4.2. Статья описания группы отчета
Группы отчета, образующие отчет, описываются вслед за статьей описания отчета. Описание каждой группы отчета начинается статьей описания группы отчета, имеющей номер уровня 01 и фразу TYPE (ТИП). Статье описания группы отчета могут подчиняться статьи описания групповых и элементарных данных, которые более подробно описывают характеристики группы отчета.
3.5. Статья описания отчета
3.5.1. Назначение
Статья описания отчета именует отчет, указывает идентифицирующие литеры, которые вставляются в начале каждой печатаемой строки отчета, и описывает его физическую структуру и организацию.
3.5.2. Общий формат
3.5.3. Синтаксические правила
(1) Имя-отчета-1 должно указываться в одной и только одной фразе REPORTS (ОТЧЕТЫ).
(2) Порядок появления фраз, следующих за именем-отчета-1, не существенен.
(3) Имя-отчета-1 является наивысшим допустимым уточнителем, который может быть указан для LINE-COUNTER (СЧЕТЧИК-СТРОК), PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) и для всех имен-данных, определяемых в секции отчетов.
3.5.4. Общие правила
(1) Фразы CODE (С КОДОМ), CONTROL (УПРАВЛЕНИЕ) и PAGE (РАЗМЕР СТРАНИЦЫ) представлены начиная с п.3.6 настоящей части.
3.5.5. Правила для счетчика страниц
(1) PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) - это зарезервированное слово, используемое для ссылки на специальный регистр, автоматически создаваемый для каждого отчета, указанного в секции отчетов (см. ч.4, п.4.2.2.1.3.3.1 и п.1.2.2 настоящей части).
(2) В секции отчетов ссылка на PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) разрешается только во фразе SOURCE (ИСТОЧНИК). В разделе процедур PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) может быть использован в любом контексте, в котором может быть указано данное или значение целого.
(3) Если в программе имеется более одного PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ), то обращение к каждому из них в разделе процедур должно быть уточнено именем-отчета.
В секции отчетов неуточненная ссылка на PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) уточняется неявно именем отчета, в статье описания которого сделана ссылка. Всякий раз, когда имеется ссылка на PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) другого отчета, PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) должен быть явно уточнен соответствующим именем-отчета.
(4) Выполнение оператора INITIATE (НАЧАТЬ) приводит к установке системой управления генератором отчетов счетчика страниц соответствующего отчета в единицу.
(5) Счетчик страниц автоматически увеличивается на единицу каждый раз, когда система управления генератором отчетов осуществляет переход на следующую страницу.
(6) Счетчик страниц может быть изменен операторами раздела процедур.
3.5.6. Правила для счетчика строк
(1) LINE-COUNTER (СЧЕТЧИК-СТРОК) - это зарезервированное слово, используемое для ссылки на специальный регистр, автоматически создаваемый для каждого отчета, указанного в секции отчетов (см. ч.4, п.4.2.2.1.3.3.1 и п.1.2.3 настоящей части).
(2) В секции отчетов ссылка на LINE-COUNTER (СЧЕТЧИК-СТРОК) разрешена только во фразе SOURCE (ИСТОЧНИК). В разделе процедур LINE-COUNTER (СЧЕТЧИК-СТРОК) может быть использован в любом контексте, в котором может быть указано данное или значение целого. Однако менять содержимое счетчика строк может только система управления генератором отчетов.
(3) Если в программе имеется более одного счетчика строк, ссылка на каждый из них в разделе процедур должна уточняться именем-отчета.
В секции отчетов неуточненная ссылка на LINE-COUNTER (СЧЕТЧИК-СТРОК) неявно уточняется именем отчета, в статье описания которого сделана ссылка. Каждый раз, когда имеется ссылка на LINE-COUNTER (СЧЕТЧИК-СТРОК) другого отчета, LINE-COUNTER (СЧЕТЧИК-СТРОК) должен быть явно уточнен соответствующим именем-отчета.
(4) Выполнение оператора INITIATE (НАЧАТЬ) приводит к установке системой управления генератором отчетов счетчика строк соответствующего отчета в нуль. Система управления генератором отчетов также автоматически переустанавливает счетчик строк в нуль при переходе на следующую страницу.
(5) На значение счетчика строк не влияет обработка непечатаемых групп отчета или печатаемых групп отчета, печать которых отменяется посредством оператора SUPPRESS (ПОДАВИТЬ).
(6) В момент представления каждой печатаемой строки значение счетчика строк указывает номер строки, на которой представляется печатаемая строка. Значение счетчика строк после представления группы отчета управляется правилами представления для группы отчета (п.3.10 настоящей части).
3.6. Фраза CODE (С КОДОМ)
3.6.1. Назначение
Фраза CODE (С КОДОМ) указывает литерал из двух литер, идентифицирующий каждую печатаемую строку отчета как принадлежащую к определенному отчету.
3.6.2. Общий формат
СОDЕ литерал-1
С КОДОМ литерал-1
3.6.3. Синтаксические правила
(1) Литерал-1 должен быть нечисловым литералом, состоящим из двух литер.
(2) Если фраза CODE (С КОДОМ) указана для некоторого отчета в файле, то она должна быть указана для всех отчетов этого файла.
3.6.4. Общие правила
(1) Если указана фраза CODE (С КОДОМ), литерал-1 автоматически помещается в первые две позиции литер каждой логической записи отчета.
(2) Позиции, занимаемые литералом-1, не включаются в описание печатаемой строки, но включаются в размер логической записи.
3.7. Фраза CONTROL (УПРАВЛЕНИЕ)
3.7.1. Назначение
Фраза CONTROL (УПРАВЛЕНИЕ) устанавливает для отчета уровни иерархии управления.
3.7.2. Общий формат
3.7.3. Синтаксические правила
(1) Имя-данного-1 не должно определяться в секции отчетов. Имя-данного-1 может быть уточненным.
(2) Каждое повторение имени-данного-1 должно идентифицировать различные данные.
(3) Имя-данного-1 не должно иметь подчиненных данных с переменным числом вхождений.
3.7.4. Общие правила
(1) Имя-данного-1 и слово FINAL (ПО КОНЦУ) указывают уровни иерархии управления. Если указано FINAL (ПО КОНЦУ), то это самый высокий уровень управления, имя-данного-1 определяет старший уровень управления, следующее повторение имени-данного-1 - промежуточный уровень управления и т.д. Последнее повторение имени-данного-1 определяет младший уровень управления.
(2) При выполнении первого по времени оператора GENERATE (ГЕНЕРИРОВАТЬ) для данного отчета система управления генератором отчетов запоминает значения всех управляющих данных, связанных с этим отчетом. При следующих выполнениях всех операторов GENERATE (ГЕНЕРИРОВАТЬ) для данного отчета СУГО проверяет, не изменились ли значения управляющих данных. Изменение значения любого управляющего данного приводит к прерыванию управления. Это прерывание управления связано с наивысшим уровнем иерархии управления, для которого отмечено изменение значения (п.4.3 настоящей части).
(3) Система управления генератором отчетов (СУГО) определяет наличие прерывания управления путем сравнения содержимого каждого управляющего данного с предыдущим содержимым каждого управляющего данного, сохраненным во время предыдущего выполнения оператора GENERATE (ГЕНЕРИРОВАТЬ) для этого же отчета. Сравнение осуществляется следующим образом:
а) если управляющее данное является числовым данным, проверка отношения является сравнением двух числовых операндов;
б) если управляющее данное является индексным данным, проверка отношения является сравнением двух индексных данных;
в) в остальных случаях проверка отношения является сравнением двух нечисловых операндов.
Проверка отношения неравенства объясняется в соответствующих параграфах (см. ч.6, п.6.3.1.1).
(4) CONTROL IS FINAL (УПРАВЛЕНИЕ ПО КОНЦУ) используется, если наиболее объемлющая управляемая группа в отчете не связана с управляющим именем-данного.
3.8. Фраза PAGE (РАЗМЕР СТРАНИЦЫ)
3.8.1. Назначение
Фраза PAGE (РАЗМЕР СТРАНИЦЫ) определяет длину страницы и вертикальные подразделения, на которых представляются группы отчета.
3.8.2. Общий формат
3.8.3. Синтаксические правила
(1) Все указанные в формате варианты фразы могут быть записаны в произвольном порядке.
(2) Целое-1 должно быть не более чем трехзначное число.
(3) Целое-2 должно быть больше или равно единице.
(4) Целое-3 должно быть больше или равно целому-2.
(5) Целое-4 должно быть больше или равно целому-3.
(6) Целое-5 должно быть больше или равно целому-4.
(7) Целое-1 должно быть больше или равно целому-5.
(8) Следующие правила указывают вертикальные подразделения страницы, на которых могут представляться группы отчета различного типа, если указана фраза PAGE (РАЗМЕР СТРАНИЦЫ) (п.3.8.5 настоящей части).
а) Если группа отчета, являющаяся заголовком отчета, должна быть представлена на отдельной странице, то описание группы должно определять ее представление в вертикальном подразделении страницы, начиная от номера строки, указанного целым-2, до номера строки указанного целым-1, включительно.
Если группа отчета, являющаяся заголовком отчета, не должна быть представлена на отдельной странице, то описание группы должно определять ее представление, начиная от номера строки, указанного целым-2, до номера строки, на единицу меньшего целого-3, включительно.
б) Если указана группа отчета типа заголовок страницы, то ее описание должно определять ее представление в вертикальном подразделении страницы, начиная от номера строки, указанного целым-2, до номера строки, на единицу меньшего целого-3, включительно.
в) Если указана группа отчета управляемый заголовок или фрагмент, описание каждой из них должно определять представление соответствующей группы в вертикальном подразделении страницы, начиная от номера строки, указанного целым-3, до номера строки, указанного целым-4, включительно.
г) Если указана группа отчета управляемая концовка, ее описание должно определять ее представление в вертикальном подразделении страницы, начиная от номера строки, указанного целым-3, до номера строки, указанного целым-5, включительно.
д) Если указана группа отчета концовка страницы, ее описание должно определять ее представление в вертикальном подразделении страницы, начиная от номера строки, на единицу большего целого-5, до номера строки, указанного целым-1, включительно.
е) Описание группы отчета концовка отчета, которая должна быть представлена на отдельной странице, должно определять ее представление в вертикальном подразделении страницы, начиная от номера строки, указанного целым-2, до номера строки, указанного целым-1 включительно.
Описание группы отчета концовка отчета, которая не должна представляться на отдельной странице, должно определять ее представление, начиная от номера строки, указанного целым-5 плюс 1, до номера строки, указанного целым-1, включительно.
(9) Все группы отчета должны быть описаны так, чтобы каждая из них могла быть представлена на одной странице. СУГО не производит разбиение групп отчета, выходящих за границы страницы.
3.8.4. Общие правила
(1) Значения целых, указанные во фразе PAGE (РАЗМЕР СТРАНИЦЫ), определяют вертикальный формат страницы отчета.
а) Целое-1 определяет размер страницы отчета, указывая число строк, доступных на каждой странице.
б) Вариант HEADING целое-2 (ЗАГОЛОВОК целое-2) определяет номер первой из строк, на которой может быть представлена группа отчета заголовок страницы или заголовок отчета.
в) Вариант FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) определяет номер первой из строк, на которой может быть представлена группа тела отчета. Заголовок отчета (без варианта NEXT GROUP NEXT PAGE (СЛЕДУЮЩАЯ ГРУППА НА СЛЕДУЮЩЕЙ СТРАНИЦЕ)) и заголовок страницы не могут быть представлены на строке с номером равным или больше целому-3.
г) Вариант LAST DETAIL (ПОСЛЕДНИЙ ФРАГМЕНТ) указывает номер последней строки, на которой могут быть представлены управляемый заголовок или фрагмент.
д) Вариант FOOTING целое-5 (КОНЦОВКА целое-5) определяет номер последней строки, на которой может быть представлена группа отчета управляемая концовка. Группа отчета концовка отчета (без варианта LINE целое-1 NEXT PAGE (НОМЕР СТРОКИ целое-1 НА СЛЕДУЮЩЕЙ СТРАНИЦЕ)) и концовка страницы должны располагаться на строке, следующей за строкой с номером, указанным целым-5.
(2) Если указана фраза PAGE (РАЗМЕР СТРАНИЦЫ) для ее опущенных вариантов имеют место следующие соглашения по умолчанию:
а) если вариант HEADING (ЗАГОЛОВОК) опущен, целое-2 предполагается равным единице;
б) если вариант FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) опущен, целое-3 предполагается равным целому-2;
в) если оба варианта LAST DETAIL (ПОСЛЕДНИЙ ФРАГМЕНТ) и FOOTING (КОНЦОВКА) опущены, целое-4 и целое-5 предполагаются равными целому-1;
г) если вариант FOOTING (КОНЦОВКА) указан, а вариант LAST DETAIL (ПОСЛЕДНИЙ ФРАГМЕНТ) опущен, целое-4 предполагается равным целому-5;
д) если вариант LAST DETAIL (ПОСЛЕДНИЙ ФРАГМЕНТ) указан, а вариант FOOTING (КОНЦОВКА) опущен, целому-5 присваивается значение целого-4.
(3) Если фраза PAGE (РАЗМЕР СТРАНИЦЫ) не указана, отчет состоит из одной страницы неопределенной длины.
(4) Правила представления для каждого типа группы отчета определены в соответствующем параграфе (п.3.10 настоящей части).
3.8.5. Области страницы
Ниже описаны области страницы, устанавливаемые фразой PAGE (РАЗМЕР СТРАНИЦЫ).
Группы отчета, которые могут быть представлены в области | Номер первой строки области | Номер последней строки области |
Заголовок отчета, описанный с вариантом NEXT GROUP NEXT PAGE (СЛЕДУЮЩАЯ ГРУППА НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) | Целое-2 | Целое-1 |
Концовка отчета, описанная вариантом LINE целое-1 NEXT PAGE (НОМЕР СТРОКИ целое-1 НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) | Целое-2 | Целое-1 |
Заголовок отчета, описанный без варианта NEXT GROUP NEXT PAGE (СЛЕДУЮЩАЯ ГРУППА НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) Заголовок страницы | Целое-2 | Целое-3 минус 1 |
Управляемый заголовок Фрагмент | Целое-3 | Целое-4 |
Управляемая концовка | Целое-2 | Целое-5 |
Концовка страницы Концовка отчета, описанная без варианта LINE целое-1 NEXT PAGE (НОМЕР СТРОКИ целое-1 НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) | Целое-5 плюс 1 | Целое-1 |
3.9. Статья описания группы отчета
3.9.1. Назначение
Статья описания группы отчета определяет характеристики группы отчета и отдельных данных в группе отчета.
3.9.2. Общий формат
Формат 1
Формат 2
номер-уровня [имя-данного-1]
номер-уровня [имя-данного-1]
Формат 3
номер-уровня [имя-данного-1]
номер-уровня [имя-данного-1]
3.9.3. Синтаксические правила
(1) Статья описания группы отчета может указываться только в секции отчетов.
(2) Фразы могут быть записаны в любом порядке, за исключением имени-данного, которое (если указывается) должно следовать непосредственно за номером-уровня.
(3) В формате 2 номер-уровня может быть любым целым от 02 до 48 включительно, в формате 3 - от 02 до 49 включительно.
(4) Описание группы отчета может состоять из одного, двух или трех уровней иерархии.
а) Первая из статей, описывающих группу отчета, должна быть представлена форматом 1.
б) Статьи формата 2 или 3 могут непосредственно подчиняться статье формата 1.
в) По крайней мере одна статья формата 3 должна подчиняться непосредственно статье формата 2.
г) Статьи формата 3 должны определять элементарные данные.
(5) В статье формата 1 имя-данного-1 обязательно только в следующих случаях:
а) если на группу отчета типа фрагмент имеется ссылка в операторе GENERATE (ГЕНЕРИРОВАТЬ);
б) если на группу отчета типа фрагмент имеется ссылка в варианте UPON (ДЛЯ) фразы SUM (СУММА);
в) если на группу отчета имеется ссылка в операторе USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ);
г) если имя группы отчета типа управляемый заголовок используется для уточнения ссылки на счетчик суммы.
Если указано имя-данного-1, на него можно ссылаться только в операторе GENERATE (ГЕНЕРИРОВАТЬ), варианте UPON (ДЛЯ) фразы SUM (СУММА), операторе USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) или использовать как уточнитель счетчика суммы.
(6) Статья формата 2 должна содержать, по крайней мере, одну необязательную фразу.
(7) В статье формата 2 имя-данного-1 не обязательно. При наличии имени-данного оно может быть использовано только для уточнения ссылок на счетчик суммы.
(8) В секции отчетов фраза об использовании используется только для печатаемых данных.
а) Если фраза об использовании указана в статье формата 3, эта статья должна определять печатаемое данное.
б) Если фраза об использовании появляется в статье формата 1 или 2, по крайней мере одна подчиненная ей статья должна определять печатаемое данное.
(9) Статья, содержащая фразу LINE NUMBER (НОМЕР СТРОКИ), не должна иметь подчиненных статей, содержащих эту фразу.
(10) Статьи формата 3 подчиняются следующим ограничениям:
а) фраза GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ) может указываться только в группе отчета типа фрагмент;
б) фраза SUM (СУММА) может указываться только в группе отчета типа управляемая концовка;
в) статья, содержащая фразу COLUMN NUMBER (НОМЕР СТОЛБЦА), но не содержащая фразу LINE NUMBER (НОМЕР СТРОКИ), должна быть подчинена статье, содержащей фразу LINE NUMBER (НОМЕР СТРОКИ);
г) имя-данного-1 не обязательно, но может быть указано в любой статье. Однако на имя-данного-1 можно ссылаться только тогда, когда статья определяет счетчик суммы;
д) статья, содержащая фразу VALUE (ЗНАЧЕНИЕ), должна также содержать фразу COLUMN NUMBER (НОМЕР СТОЛБЦА).
(11) Ниже представлены все допустимые комбинации фраз для статей формата 3. Таблицу следует читать слева направо вдоль выбранной строки.
"О" указывает, что наличие фразы обязательно.
"Р" указывает, что наличие фразы разрешается, но фраза не является обязательной.
"-" указывает, что фраза не разрешается.
PIC (Ш) | COLUMN (НОМЕР СТОЛБ- | SOURCE (ИСТОЧ- | SUM (СУММА) | VALUE (ЗНА- | JUST (СДВИ- | BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) | GROUP INDICATE (ОПРЕДЕ- | USAGE (ДЛЯ ВЫ- | SIGN (ЗНАК) | LINE NUMBER (НОМЕР СТРОКИ) |
O | - | - | O | - | - | - | - | - | P | P |
O | O | - | O | - | - | P | - | P | P | P |
O | Р | O | - | - | Р | - | P | P | P | P |
O | Р | O | - | - | - | P | P | P | P | P |
O | O | - | - | O | Р | - | P | P | P | P |
3.9.4. Общие правила
(1) Формат 1 относится к статье группы отчета. Группа отчета определяется этой статьей и всеми подчиненными ей статьями.
(2) Фразы BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ), JUSTIFIED (СДВИНУТО) и PICTURE (ШАБЛОН) в модуле генератора отчетов такие же, как соответствующие фразы в модуле ядра. Поэтому описание этих фраз см. в ч.7, пп.5.4, 5.6 и 5.9, соответственно. Остальные фразы статьи описания группы отчета представлены, начиная с п.3.11 настоящей части.
3.10. Таблицы правил представления
3.10.1. Назначение
В таблицах и правилах, приведенных ниже, определяются:
(1) допустимые комбинации фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) для каждого из типов группы отчета;
(2) требования к использованию этих фраз;
(3) интерпретация этих фраз системой управления генератором отчетов.
3.10.2. Пояснение к таблицам
Для каждого из следующих типов групп отчета - заголовок отчета, заголовок страницы, концовка страницы, концовка отчета, - имеется отдельная таблица правил представления. Кроме того, в таблице правил представления тела группы объединены группы отчета типов фрагмент, управляемый заголовком и управляемая концовка (п.3.10.8 настоящей части).
В столбцах 1 и 2 таблицы правил представления выписаны все допустимые комбинации фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) для соответствующего типа группы отчета. Для определения набора правил представления, применяемого для определенной комбинации фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), следует читать таблицу правил представления слева направо вдоль выбранной строки.
Столбцы применяемых правил в таблице правил представления разделены на две части. В первой части указаны правила, применяемые, если описание отчета содержит фразу PAGE (РАЗМЕР СТРАНИЦЫ), и во второй части указаны правила, применяемые, если фраза PAGE (РАЗМЕР СТРАНИЦЫ) отсутствует. Назначение правил указанных в столбцах применяемых правил, приведено ниже.
(1) Правила верхней и нижней границы
Эти правила определяют вертикальные подразделения страницы, в рамках которых может быть представлена указанная группа отчета.
При отсутствии фразы PAGE (РАЗМЕР СТРАНИЦЫ) печатаемый отчет рассматривается как не разделенный по вертикали. Поэтому в таблицах правила верхней границы и правила нижней границы не указаны для описания отчета, в котором фраза PAGE (РАЗМЕР СТРАНИЦЫ) опущена.
(2) Правила проверки вместимости
Правила проверки вместимости применимы только к группам тела отчета, и поэтому правила проверки вместимости указаны только в таблице правил представления группы тела отчета. Во время выполнения система управления генератором отчетов применяет правила проверки вместимости для определения, может ли быть представлена соответствующая группа тела отчета на странице, на которой в текущее время располагается отчет.
Тем не менее, даже для групп тела отчета нет правил проверки вместимости, если фраза PAGE (РАЗМЕР СТРАНИЦЫ) опущена в статье описания отчета.
(3) Правила позиции первой печатаемой строки
Правила позиции первой печатаемой строки определяют местоположение, где система управления генератором отчетов может представить первую печатаемую строку данной группы отчета.
Таблицы этих правил не определяют местоположение, где система управления генератором отчетов может представить вторую и последующие (если таковые имеются) строки группы отчета. Отдельные общие правила определяют, где могут быть представлены вторая и последующие строки группы отчета. Эта информация содержится в общих правилах фразы LINE NUMBER (НОМЕР СТРОКИ) (п.3.15 настоящей части).
(4) Правила следующей группы
Правила следующей группы относятся к особенностям использования фразы NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
(5) Правила результирующей установки счетчика строк
Конечные значения, помещаемые системой управления генератором отчетов в специальный регистр LINE-COUNTER (СЧЕТЧИК-СТРОК) после представления группы отчета определяются правилами результирующей установки счетчика строк.
3.10.3. Обозначение в таблице для фразы LINE NUMBER (НОМЕР СТРОКИ)
В столбце 1 таблицы правил представления используются следующие сокращенные обозначения для описания последовательности фраз LINE NUMBER (НОМЕР СТРОКИ), которые могут появиться в описании группы отчета:
(1) А - обозначает одну или несколько фраз LINE NUMBER (НОМЕР СТРОКИ) без варианта NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ), задающих абсолютное значение номера строки, появляющихся одна за другой в последовательности фраз LINE NUMBER (НОМЕР СТРОКИ) в статье описания группы отчета. В дальнейшем такие фразы будем называть абсолютными;
(2) О - обозначает одну или несколько последовательных фраз LINE NUMBER (НОМЕР СТРОКИ) в статье описания группы отчета, задающих относительное смещение номера строки; такие фразы будем называть относительными;
(3) СС - обозначает одну или несколько абсолютных последовательных фраз LINE NUMBER (НОМЕР СТРОКИ) в статье описания группы отчета, первая из которых и только она содержит вариант NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ).
Появление в одной строке столбца из двух обозначений указывает, что в последовательности фраз COLUMN NUMBER (НОМЕР СТОЛБЦА) имеются обе указанные последовательности. Например "А О" указывает, что в статье описания группы отчета за последовательностью фраз типа "А" (определенных в правиле 1 выше) непосредственно следует последовательность фраз типа "О" (определенных в правиле 2).
3.10.4. Область применимости правил для фразы LINE NUMBER (НОМЕР СТРОКИ)
Все правила представления применимые к последовательности "А О", применимы также к последовательности "А".
Все правила представления, применимые к последовательности "СС О", применимы также к последовательности "СС".
3.10.5. Понятие сохраняемой позиции следующей группы
Сохраняемая позиция следующей группы представляет данное, доступное только системе управления генератором отчетов. Если абсолютная фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) указывает значение вертикального расположения, которое не может быть достигнуто на текущей странице, СУГО запоминает это значение в сохраняемой позиции следующей группы. После осуществления перехода к следующей странице СУГО располагает следующую группу тела отчета, используя сохраняемое значение следующей группы.
3.10.6. Правила представления группы типа заголовок отчета
В табл.1 указаны соответствующие правила представления для всех допустимых комбинаций фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) в группе отчета типа заголовок отчета.
Таблица 1
** | Применяемые правила*** | |||||||
Фраза PAGE (РАЗМЕР СТРАНИЦЫ) указана | Фраза PAGE (РАЗМЕР СТРАНИЦЫ) опущена | |||||||
После- | Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) | Верх- | Ниж- | Пози- | Пози- | Резуль- | Позиция первой печатаемой строки | Результи- |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
А О | Абсолютная | 1 | 2a | 3а | 4а | 5а | Запрещенная комбинация+ | |
А О | Относительная | 1 | 2а | 3а | 4б | 5б | Запрещенная комбинация+ | |
А О | NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) | 1 | 2б | 3а | 4в | 5в | Запрещенная комбинация+ | |
А О | - | 1 | 2а | 3а | - | 5г | Запрещенная комбинация+ | |
О | Абсолютная | 1 | 2а | 3б | 4а | 5а | Запрещенная комбинация++ | |
О | Относительная | 1 | 2а | 3б | 4б | 5б | 3г | 5б |
О | NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) | 1 | 2б | 3б | 4в | 5в | Запрещенная комбинация++ | |
О | - | 1 | 2а | 3б | - | 5г | 3г | 5г |
- | - | - | - | 3в | - | 5д | 3в | 5д |
________________
* Описание сокращений, используемых в столбце 1, см. п.3.10.3.
** Знак "-" в столбцах 1 и 2 указывает на отсутствие названных фраз в статье описания группы отчета.
*** Знак "-" в столбцах применяемых правил означает отсутствие правил представления для данной комбинации фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
+ См. п.3.15, фраза LINE NUMBER (НОМЕР СТРОКИ).
++ См. п.3.16, фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
(1) Правило верхней границы
Номер первой строки, на которой может быть представлена группа типа заголовок отчета является номером строки, указанным в варианте HEADING (ЗАГОЛОВОК) фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(2) Правила нижней границы:
а) номер последней строки, на которой может быть представлена группа типа заголовок отчета, является номером строки, полученным в результате вычитания единицы из значения целого-3 в варианте FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ);
б) номер последней строки, на которой может быть представлена группа типа заголовок отчета, равняется номеру строки, указанному целым-1 фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(3) Правила позиции первой печатаемой строки:
а) первая печатаемая строка группы типа заголовок отчета представляется на строке с номером, указанным целым в соответствующей фразе LINE NUMBER (НОМЕР СТРОКИ);
б) первая печатаемая строка группы типа заголовок отчета представляется на строке с номером, полученным в результате сложения целого, указанного в первой фразе LINE NUMBER (НОМЕР СТРОКИ), и значения, полученного в результате вычитания единицы из целого-2 в варианте HEADING (ЗАГОЛОВОК) фразы PAGE (РАЗМЕР СТРАНИЦЫ);
в) группа типа заголовок отчета не представляется;
г) первая печатаемая строка группы типа заголовок отчета представляется на строке с номером, равным значению результата сложения содержимого соответствующего LINE-COUNTER (СЧЕТЧИК-СТРОК) (в данном случае равного нулю) с целым, указанным первой фразой LINE NUMBER (НОМЕР СТРОКИ).
(4) Правила следующей группы:
а) целое, указанное фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), должно быть больше номера строки, на которой представляется последняя печатаемая строка группы типа заголовок отчета. Кроме того, целое, указанное фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), должно быть меньше номера строки, указанного значением целого-3 варианта FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ);
б) сумма целого, указанного фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), и номер строки, на которой представляется последняя печатаемая строка группы типа заголовок отчета, должна быть меньше значения целого-3 в варианте FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ);
в) фраза NEXT GROUP NEXT PAGE (СЛЕДУЮЩАЯ ГРУППА НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) означает, что только группа типа заголовок отчета представляется на первой странице отчета. Система управления генератором отчетов не вырабатывает никакой другой группы отчета во время позиционирования на первой странице отчета.
(5) Правила результирующей установки счетчика строк:
а) после представления группы типа заголовок отчета система управления генератором отчетов помещает целое, указанное фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), в LINE-COUNTER (СЧЕТЧИК-СТРОК) в качестве результирующей установки счетчика строк;
б) после представления группы типа заголовок отчета система управления генератором отчетов в качестве результирующей установки счетчика строк помещает сумму целого, заданного фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) и номера строки, на которой представлена последняя печатаемая строка группы типа заголовок отчета;
в) после представления группы типа заголовок отчета система управления генератором отчетов в качестве результирующей установки счетчика строк помещает нуль в счетчик строк;
г) после представления группы типа заголовок отчета результирующей установкой счетчика строк является номер строки, на которой представлена последняя печатаемая строка группы заголовок отчета;
д) при обработке непечатаемой группы отчета значение LINE-COUNTER (СЧЕТЧИК-СТРОК) не изменяется.
3.10.7. Правила представления группы типа заголовок страницы
В табл.2 приведены правила представления группы типа заголовок страницы при всех допустимых комбинациях фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
Таблица 2
** | Применяемые правила*** | |||||
Фраза PAGE (РАЗМЕР СТРАНИЦЫ) указана**** | ||||||
Последовательность фраз LINE NUMBER (НОМЕР СТРОКИ) | Фраза NEXT GROUP (СЛЕ- | Верхняя граница | Нижняя граница | Позиция первой печатаемой строки | Следующая группа | Результи- |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
А О | - | 1 | 2 | 3а | - | 4а |
О | - | 1 | 2 | 3б | - | 4а |
- | - | - | - | 3в | - | 4б |
________________
* Описание сокращений, используемых в столбце 1, см. п.3.10.3.
** Знак "-" в столбце 1 или 2 указывает на отсутствие названной фразы в статье описания группы отчета.
*** Знак "-" в столбце применяемых правил указывает на отсутствие названного правила для данной комбинации фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
**** Если в статье описания отчета опущена фраза PAGE (РАЗМЕР СТРАНИЦЫ), группа отчета заголовок страницы не может быть определена (п.3.20 настоящей части).
Правила представления группы отчета типа заголовок страницы следующие.
(1) Правило верхней границы
Если группа типа заголовок отчета должна быть представлена на той же странице, на которой представляется группа отчета типа заголовок страницы, то номер первой строки, на которой может быть представлена группа типа заголовок страницы, на единицу больше результирующего регистра LINE-COUNTER (СЧЕТЧИК-СТРОК), установленного после представления заголовка отчета.
В противном случае номер первой строки, на которой может быть представлена группа отчета типа заголовок страницы, определяется вариантом HEADING (ЗАГОЛОВОК) фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(2) Правило нижней границы
Номер последней строки, на которой может быть представлена группа отчета типа заголовок страницы, это номер, полученный в результате вычитания единицы от значения целого-3, указанного в варианте FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(3) Правила первой печатаемой строки:
а) первая печатаемая строка группы отчета типа заголовок страницы представляется на строке, номер которой указан целым в ее фразе LINE NUMBER (НОМЕР СТРОКИ);
б) если группа отчета типа заголовок отчета будет представлена на той же странице, на которой представляется группа отчета типа заголовок страницы, но номер строки, на которой представляется первая печатаемая строка группы типа заголовок страницы, определяется как сумма результирующего значения LINE-COUNTER (СЧЕТЧИК-СТРОК), установка которого выполнена при представлении группы типа заголовок отчета, и целого в первой фразе LINE NUMBER (НОМЕР СТРОКИ) группы отчета типа заголовок страницы.
Иначе номер строки, на которой представляется первая печатаемая строка группы отчета типа заголовок страницы, определяется как сумма целого первой фразы LINE NUMBER (НОМЕР СТРОКИ) группы типа заголовок страницы и уменьшенного на единицу значения целого-2 в варианте HEADING (ЗАГОЛОВОК) фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(4) Правила результирующей установки LINE-COUNTER (СЧЕТЧИК-СТРОК):
а) результирующая установка LINE-COUNTER (СЧЕТЧИК-СТРОК) - номер строки, на которой представлена последняя печатаемая строка группы отчета типа заголовок страницы;
в) LINE-COUNTER (СЧЕТЧИК-СТРОК) не изменяется при обработке непечатаемой группы отчета.
3.10.8. Правила представления группы тела отчета
В табл.3 приведены соответствующие правила представления для всех допустимых комбинаций фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) в группах типа управляемый заголовок, фрагмент и управляемая концовка. Правила представления групп тела отчета следующие.
Таблица 3
Правила представления группы отчета
** | Применяемые правила*** | |||||||||
Фраза PAGE (РАЗМЕР СТРАНИЦЫ) указана | Фраза PAGE (РАЗМЕР СТРАНИЦЫ) опущена | |||||||||
После- | фраза NEXT GROUP (СЛЕ- | Верх- | Ниж- | Про- | Позиция первой печа- | Сле- дую- | Резуль- | |||
Позиция первой печа- | Результи- | |||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
А О | Абсолютная | 1 | 2 | 3а | 4а | 5 | 6а | Запрещенная комбинация+ | ||
А О | Относительная | 1 | 2 | 3а | 4а | - | 6б | Запрещенная комбинация+ | ||
А О | NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) | 1 | 2 | 3а | 4а | - | 6в | Запрещенная комбинация+ | ||
А О | - | 1 | 2 | 3а | 4а | - | 6г | 3аирещенная комбинация+ | ||
О | Абсолютная | 1 | 2 | 3б | 4б | 5 | 6а | Запрещенная комбинация++ | ||
О | Относительная | 1 | 2 | 3б | 4б | - | 6б | 4г | 6е | |
О | NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) | 1 | 2 | 3б | 4б | - | 6в | Запрещенная комбинация+++ | ||
О | - | 1 | 2 | 3б | 4б | - | 6г | 4г | 6г | |
СС О | Абсолютная | 1 | 2 | 3в | 4а | 5 | 6а | Запрещенная комбинация+ | ||
СС О | Относительная | 1 | 2 | 3в | 4а | - | 6б | Задрещенная комбинация+ | ||
СС О | NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) | 1 | 2 | 3в | 4а | - | 6в | Защрещенная комбинация+ | ||
СС О | - | 1 | 2 | 3в | 4а | - | 6г | Запрещенная комбинация+ | ||
- | - | - | - | - | 4в | - | 6д | 4в | 6д |
________________
* Описание сокращений, используемых в столбце 1, см. п.3.10.3, обозначение фразы LINE NUMBER (НОМЕР СТРОКИ).
** Знак "-" в столбце 1 или 2 указывает, что названная фраза отсутствует в статье описания группы отчета.
*** Знак "-" в столбцах применяемых правил обозначает отсутствие названного правила для данной комбинации фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
+ См. п.3.15, фраза LINE NUMBER (НОМЕР СТРОКИ).
++ См. п.3.16, фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
(1) Правило верхней границы
Номер первой строки, на которой может быть представлена группа тела отчета, указывается вариантом FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(2) Правила нижней границы
Номер последней строки, на которой может быть представлена группа отчета типа управляемый заголовок или фрагмент, указывается вариантом LAST DETAIL (ПОСЛЕДНИЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ).
Номер последней строки, на которой может быть представлена группа типа управляемых концовка, указывается вариантом FOOTING (КОНЦОВКА) фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(3) Правила проверки вместимости:
а) если значение LINE-COUNTER (СЧЕТЧИК-СТРОК) меньше целого, указанного первой из фраз LINE NUMBER (НОМЕР СТРОКИ), задающих абсолютное значение, группа тела отчета будет представлена на странице, на которой в данный момент представляется отчет.
В противном случае СУГО обеспечивает переход на следующую страницу. После обработки группы типа заголовок страницы (если такая группа определена), СУГО определяет, была ли установлена сохраняемая позиция следующей группы при представлении последней группы тела отчета на предыдущей странице (см. далее правило 6а). Если сохраняемая позиция следующей группы не была установлена, группа тела отчета будет представлена на странице, на которой в данный момент представляется отчет. Если же сохраняемая позиция следующей группы была установлена, СУГО присваивает регистру LINE-COUNTER (СЧЕТЧИК-СТРОК) значение сохраняемой позиции следующей группы, устанавливает в нуль значение сохраняемой позиции следующей группы и повторно применяет правило 3а проверки вместимости;
б) если некоторая группа тела представляется на текущей странице, СУГО вычисляет пробную сумму в рабочей области. Пробная сумма вычисляется путем сложения значения LINE-COUNTER (СЧЕТЧИК-СТРОК) и всех целых, указанных фразами LINE NUMBER (НОМЕР-СТРОКИ) группы отчета. Если полученная сумма не больше определенной для данной группы нижней границы ее представления, группа отчета представляется на текущей странице. Если же полученная сумма превышает определенную для данной группы нижнюю границу, СУГО обеспечивает переход к следующей странице. После обработки группы типа заголовок страницы (если таковой определен), СУГО вновь применяет правило 3б проверки вместимости.
Если на текущей странице отчета не была еще представлена ни одна группа тела отчета, СУГО определяет, было ли установлено значение сохраняемой позиции следующей группы при представлении последней группы тела отчета на предыдущей странице (см. ниже правило 6а результирующей установки LINE-COUNTER (СЧЕТЧИК-СТРОК).
Если значение сохраняемой позиции следующей группы не было установлено, группа тела отчета будет представляться на текущей странице отчета.
Если значение сохраняемой позиции следующей группы было установлено, СУГО помещает значение сохраняемой позиции следующей группы LINE-COUNTER (СЧЕТЧИК-СТРОК), устанавливает в нуль значение сохраняемой позиции следующей группы и повторно вычисляет пробную сумму в рабочей области.
Пробная сумма вычисляется сложением сумм значения LINE-COUNTER (СЧЕТЧИК-СТРОК) с единицей и целыми, указанными во фразе LINE NUMBER (НОМЕР СТРОКИ), за исключением первой фразы группы тела отчета. Если полученная сумма не превосходит определенную для данной группы нижнюю границу, тело группы отчета представляется на текущей странице. Если же полученная сумма больше определенной для данной группы нижней границы, СУГО обеспечивает переход на следующую страницу. После обработки группы типа заголовок страницы (если таковая определена) СУГО представляет группу тела отчета на этой странице;
в) если на текущей странице была уже представлена группа тела отчета, СУГО осуществляет переход к следующей странице. После обработки группы заголовок страницы (если таковая определена) СУГО повторно применяет правило 3в вместимости. Если на текущей странице отчета не представлена ни одна группа тела отчета, СУГО определяет, было ли установлено при представлении последней группы тела отчета на предыдущей странице значение сохраняемой позиции следующей группы (см. правило 6а заключительной установки LINE-COUNTER (СЧЕТЧИК-СТРОК). Если значение сохраняемой позиции следующей группы не установлено, группа тела отчета представляется на текущей странице отчета. Если значение сохраняемой позиции следующей группы установлено, СУГО помещает установленное значение в LINE-COUNTER (СЧЕТЧИК-СТРОК) и переустанавливает значение сохраняемой позиции следующей группы в нуль. Если значение LINE-COUNTER (СЧЕТЧИК-СТРОК) меньше целого, указанного в варианте FIRST (ПЕРВЫЙ) абсолютной фразы LINE NUMBER (НОМЕР СТРОКИ), группа тела отчета представляется на текущей странице отчета. В противном случае СУГО осуществляет переход к следующей странице. После обработки группы типа заголовок страницы (если таковая определена) СУГО представляет группу тела отчета на этой странице.
(4) Правила позиции первой печатаемой строки:
а) первая печатаемая строка группы тела отчета представляется на строке с номером, указанным целым соответствующей фразы LINE NUMBER (НОМЕР СТРОКИ);
б) если значение LINE-COUNTER (СЧЕТЧИК-СТРОК) равно или больше номера строки, указанного вариантом FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ), и на текущей странице отчета еще не была представлена ни одна группа тела отчета, первая печатаемая строка данной группы тела отчета представляется на строке, непосредственно следующей за строкой, номер которой указан значением LINE-COUNTER (СЧЕТЧИК-СТРОК).
Если значение LINE-COUNTER (СЧЕТЧИК-СТРОК) равно или больше номера строки, указанного вариантом FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ), и если на текущей странице отчета уже была представлена некоторая группа тела отчета, то первая печатаемая строка данной группы тела отчета представляется на строке, номер которой равен сумме значения LINE-COUNTER (СЧЕТЧИК-СТРОК) и целого первой фразы LINE NUMBER (НОМЕР СТРОКИ) текущей группы тела отчета.
Если значение LINE-COUNTER (СЧЕТЧИК-СТРОК) меньше, номера строки, указанного FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ), первая печатаемая строка группы тела отчета представляется на строке, номер которой указан вариантом FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ);
в) группа тела отчета не представляется;
г) номер строки, на которой представляется первая печатаемая строка, определяется суммой содержимого LINE-COUNTER (СЧЕТЧИК-СТРОК) и целого, указанного первой фразой LINE NUMBER (НОМЕР СТРОКИ).
(5) Правило следующей группы
Абсолютное значение номера строки, указанное целым фразы NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), должно определять номер строки, не меньший значения, указанного во фразе FIRST DETAIL (ПЕРВЫЙ ФРАГМЕНТ) фразы PAGE (РАЗМЕР СТРАНИЦЫ), и не больший значения, указанного во фразе FOOTING (КОНЦОВКА) той же фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(6) Правила результирующей установки LINE-COUNTER (СЧЕТЧИК-СТРОК):
а) если представленная последней группа тела отчета является управляемой концовкой, не связанной с наивысшим уровнем, на котором СУГО было обнаружено прерывание управления, то результирующее значение LINE-COUNTER (СЧЕТЧИК-СТРОК) устанавливается равным номеру строки, на которой была представлена последняя печатаемая строка группы управляемая концовка.
Во всех остальных случаях СУГО сравнивает номер строки, на которой была представлена последняя печатаемая строка группы тела, с целым, указанным фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА). Если сравниваемый номер строки меньше этого целого, СУГО устанавливает LINE-COUNTER (СЧЕТЧИК-СТРОК) равным значению, представленному целым во фразе NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА). Если же сравниваемый номер строки больше или равен целому, указанному фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), СУГО помещает в LINE-COUNTER (СЧЕТЧИК СТРОК) значение, равнее номеру строки, указанному в варианте FOOTING (КОНЦОВКА) фразы PAGE (РАЗМЕР СТРАНИЦЫ); кроме того значение сохраняемой позиции следующей группы устанавливается равным целому, указанному фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА);
б) если представленная последней группа тела отчета является управляемой концовкой и не связана с наивысшим уровнем, на котором СУГО было обнаружено прерывание управления, то результирующее значение LINE-COUNTER (СЧЕТЧИК-СТРОК) устанавливается равным номеру строки, на которой была представлена последняя печатаемая строка группы управляемая концовка.
Во всех остальных случаях СУГО вычисляет в рабочем поле пробную сумму. Пробная сумма является суммой целого, указанного фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), и номера строки, на которой представлена последняя печатаемая строка группы тела отчета. Если пробная сумма меньше номера строки, указанного в варианте FOOTING (КОНЦОВКА) фразы PAGE (РАЗМЕР СТРАНИЦЫ), СУГО помещает эту сумму в LINE-COUNTER (СЧЕТЧИК-СТРОК) в качестве его результирующего значения. Если пробная сумма равна или больше номера строки, указанного в варианте FOOTING (КОНЦОВКА) фразы PAGE (РАЗМЕР СТРАНИЦЫ), то СУГО помещает в LINE-COUNTER (СЧЕТЧИК-СТРОК) в качестве его результирующего значения значение номера строки, указанного в варианте FOOTING (КОНЦОВКА) фразы PAGE (РАЗМЕР СТРАНИЦЫ);
в) если представленная группа отчета является группой отчета управляемая концовка и она не связана с наивысшим уровнем, на котором СУГО было обнаружено прерывание управления, результирующим значением LINE-COUNTER (СЧЕТЧИК-СТРОК) является номер строки, на которой была представлена последняя печатаемая строка группы управляемая концовка.
Во всех остальных случаях СУГО в качестве результирующего значения помещает в LINE-COUNTER (СЧЕТЧИК-СТРОК) значение номера строки, указанного в варианте FOOTING (КОНЦОВКА) фразы PAGE (РАЗМЕР СТРАНИЦЫ);
г) результирующим значением LINE-COUNTER (СЧЕТЧИК-СТРОК) является номер строки, на которой была представлена последняя печатаемая строка группы тела отчета;
д) при обработке непечатаемой группы тела отчета LINE-COUNTER (СЧЕТЧИК-СТРОК) не изменяется;
е) если представленная последней группа тела отчета является управляемой концовкой, но она не связана с наивысшим уровнем, на котором СУГО было обнаружено прерывание управления, то результирующим значением LINE-COUNTER (СЧЕТЧИК-СТРОК) является значение, равное номеру строки, на которой была представлена последняя печатаемая строка управляемой концовки.
Во всех остальных случаях в качестве результирующего значения СУГО помещает в LINE-COUNTER (СЧЕТЧИК-СТРОК) сумму номера строки, на которой была представлена последняя печатаемая строка, и целого, указанного фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
3.10.9. Правила представления концовки страницы
В табл.4 приведены правила представления группы типа концовка страницы для всех допустимых комбинаций фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
Таблица 4
Правила представления концовки страницы
** | Применяемые правила** | |||||
Фраза PAGE (РАЗМЕР СТРАНИЦЫ) указана**** | ||||||
Последовательность фраз LINE NUMBER (НОМЕР СТРОКИ) | Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) | Верхняя граница | Нижняя граница | Позиция первой печатаемой строки | Следующая группа | Результирующая установка LINE-COUNTER (СЧЕТЧИК-СТРОК) |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
А О | Абсолютная | 1 | 2 | 3а | 4а | 5а |
А О | Относительная | 1 | 2 | 3а | 4б | 5б |
А О | 1 | 2 | 3а | - | 5в | |
3б | - | 5г |
________________
* Описание сокращений, используемых в столбце 1 см. п.3.10.3 настоящей части.
** Знак "-" в столбце 1 или 2 указывает на отсутствие фразы в статье описания группы отчета.
*** Знак "-" в столбце применяемых правил обозначает отсутствие названного правила для данной комбинации фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
**** Если в статье описания отчета фраза PAGE (РАЗМЕР СТРАНИЦЫ) опущена, группа концовка страницы не может быть определена (п.3.20 настоящей части).
Правила представления концовки страницы следующие.
(1) Правило верхней границы
Номер первой строки, на которой может быть представлена группа типа концовка страницы, равен увеличенному на единицу значению целого-5, указанного вариантом FOOTING (КОНЦОВКА) фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(2) Правило нижней границы
Номер последней строки, на которой может быть представлена группа типа концовка страницы, равен целому-1, указанному фразой PAGE (РАЗМЕР СТРАНИЦЫ).
(3) Правила позиции первой печатаемой строки:
а) первая печатаемая строка группы типа концовка страницы представляется на строке, номер которой определяется ее фразой LINE NUMBER (НОМЕР СТРОКИ);
б) группа типа концовка страницы не представляется.
(4) Правила следующей группы:
а) целое, указанное фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), должно быть больше номера строки, на которой представляется последняя печатаемая строка группы типа концовка страницы. Кроме того, целое, указанное фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) не должно превышать номера строки, указанного целым-1 фразы PAGE (РАЗМЕР СТРАНИЦЫ);
б) сумма целого, указанного фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), и номера строки, на которой представляется последняя печатаемая строка группы типа концовка страницы, не должна превышать целого-1, указанного фразой PAGE (РАЗМЕР СТРАНИЦЫ).
(5) Правила результирующей установки LINE-COUNTER (СЧЕТЧИК СТРОК);
а) после представления группы типа концовка страницы СУГО помещает в LINE-COUNTER (СЧЕТЧИК-СТРОК) в качестве результирующего значения целое, указанное фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА);
б) после представления группы концовка страницы СУГО помещает в качестве результирующего значения в LINE-COUNTER (СЧЕТЧИК-СТРОК) значение, равное сумме целого, указанного фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), и номера строки, на которой была представлена последняя печатаемая строка группы типа концовка страницы;
в) после представления группы типа концовка страницы результирующее значение LINE-COUNTER (СЧЕТЧИК-СТРОК) равно номеру строки, на которой была представлена последняя печатаемая строка группы типа концовка страницы;
г) при обработке непечатаемой группы отчета LINE-COUNTER (СЧЕТЧИК-СТРОК) не изменяется.
3.10.10. Правила представления концовки отчета
В табл.5 приведены соответствующие правила представления группы типа концовка отчета при всех допустимых комбинациях LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
Таблица 5
** | Применяемые правила*** | |||||||
Фраза PAGE (РАЗМЕР СТРАНИЦЫ) указана | Фраза PAGE (РАЗМЕР СТРАНИЦЫ) опущена | |||||||
Последо- | Фраза NEXT GROUP (СЛЕ- | Верх- | Ниж- | Пози- | Следую- | Результи- | Позиция первой печатаемой строки | Результирующая установка LINE-COUNTER (СЧЕТЧИК-СТРОК) |
А О | - | 1а | 2 | 3а | - | 4а | Запрещенная комбинация+ | |
О | - | 1а | 2 | 3б | - | 4а | 3г | 4а |
СС О | - | 1б | 2 | 3в | - | 4а | Запрещенная комбинация+ | |
- | - | - | - | 3д | - | 4б | 3д | 4б |
________________
* Описание сокращений, используемых в столбце 1, см. п.3.10.3.
** Знак "-" в столбце 1 и 2 указывает, что названная фраза отсутствует в статье описания группы отчета.
*** Знак "-" в столбце применяемых правил обозначает отсутствие названного правила для данной комбинации фраз LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
+ См. п.3.15 настоящей части.
Правила представления концовки отчета следующие.
(1) Правила верхней границы:
а) если группа отчета типа концовка страницы должна быть представлена на текущей странице отчета, номер первой строки, на которой она может быть представлена, должен быть на единицу больше результирующего значения LINE-COUNTER (СЧЕТЧИК-СТРОК) после представления группы типа концовка страницы.
В остальных случаях номер первой строки, на которой может быть представлена группа типа концовка отчета, устанавливается равным увеличенному, на единицу значению целого-5 фразы PAGE (РАЗМЕР СТРАНИЦЫ);
б) номер первой строки, на которой может быть представлена группа типа концовка отчета, равен номеру строки, указанному в варианте HEADING (ЗАГОЛОВОК) фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(2) Правило нижней границы
Номер последней строки, на которой может быть представлена группа типа концовка отчета определяется целым-1 фразы PAGE (РАЗМЕР СТРАНИЦЫ).
(3) Правила позиции первой печатаемой строки:
а) первая печатаемая строка группы типа концовка отчета представляется на строке, указанной целым фразы LINE NUMBER (НОМЕР СТРОКИ) для концовки отчета;
6) если группа типа концовка отчета должна быть представлена на текущей странице, то номер строки, на которой представляется ее первая печатаемая строка группы концовка отчета, определяется суммой результирующего значения LINE-COUNTER (СЧЕТЧИК-СТРОК) после представления группы концовка отчета и целого, указанного в первой из фраз LINE NUMBER (НОМЕР СТРОКИ) в описании группы отчета типа концовка отчета. В остальных случаях номер строки, на которой представляется первая печатаемая строка группы концовка отчета, определяется суммой целого в первой фразе LINE NUMBER (НОМЕР СТРОКИ) группы отчета типа REPORT FOOTING (КОНЦОВКА ОТЧЕТА) и номера строки, указанного значением целого-5 варианта FOOTING (КОНЦОВКА) фразы PAGE (РАЗМЕР СТРАНИЦЫ);
в) фраза NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) в первой из абсолютных фраз LINE NUMBER (НОМЕР СТРОКИ) указывает, что группа типа концовка отчета представляется на отдельной странице, на которой никакая другая группа не представлена. Первая печатаемая строка группы типа концовка отчета представляется на строке, номер которой указан целым фразы LINE NUMBER (НОМЕР СТРОКИ) группы отчета типа концовка отчета;
г) номер строки, на которой представляется первая печатаемая строка группы типа концовка отчета, определяется суммой целого первой фразы LINE NUMBER (НОМЕР СТРОКИ) и значения LINE-COUNTER (СЧЕТЧИК-СТРОК);
д) группа типа концовка отчета не представляется.
(4) Правила результирующей установки LINE-COUNTER (СЧЕТЧИК-СТРОК):
а) результирующее значение LINE-COUNTER (СЧЕТЧИК-СТРОК) равно номеру строки, на которой представляется последняя печатаемая строка группы концовка отчета;
б) при обработке непечатаемой группы отчета значение LINE-COUNTER (СЧЕТЧИК-СТРОК) не изменяется.
3.11. Фраза COLUMN NUMBER (НОМЕР СТОЛБЦА)
3.11.1. Назначение
Фраза COLUMN NUMBER (НОМЕР СТОЛБЦА) идентифицирует данное как печатаемое и указывает позицию данного на печатаемой строке.
3.11.2. Общий формат
COLUMN NUMBER целое-1
НОМЕР СТОЛБЦА целое-1
3.11.3. Синтаксические правила
(1) Фраза COLUMN NUMBER (НОМЕР СТОЛБЦА) может быть указана в группе отчета только на элементарном уровне. Если фраза COLUMN NUMBER (НОМЕР СТОЛБЦА) указана, она должна находиться в статье, содержащей фразу LINE NUMBER (НОМЕР СТРОКИ), или в статье, подчиненной статье, содержащей фразу LINE NUMBER (НОМЕР СТРОКИ).
(2) Печатаемые данные должны определяться в порядке возрастания номеров столбцов в пределах отдельной печатаемой строки таким образом, что каждое печатаемое данное занимает единственную последовательность позиций смежных литер.
3.11.4. Общие правила
(1) Фраза COLUMN NUMBER (НОМЕР СТОЛБЦА) указывает, что на печатаемой строке представляется объект фразы SOURCE (ИСТОЧНИК), объект фразы VALUE (ЗНАЧЕНИЕ) или счетчик суммы, определяемый фразой SUM (СУММА). Отсутствие фразы COLUMN NUMBER (НОМЕР СТОЛБЦА) указывает, что статья не будет представлена на печатаемой строке.
(2) Целое-1 указывает номер позиции на строке самой левой литеры печатаемого данного.
(3) СУГО проставляет пробелы на всех позициях печатаемой строки, не занятых печатаемыми данными.
(4) Самая левая позиция печатаемой строки соответствует номеру столбца 1.
3.12. Фраза "имя-данного"
3.12.1. Назначение
Имя-данного определяет имя описываемого данного.
3.12.2. Общий формат
Имя-данного-1
3.12.3. Синтаксические правила
(1) В секции отчетов имя-данного-1 не обязательно определять в статье описания данного.
3.12.4. Общие правила
(1) В секции отчетов имя-данного-1 должно быть задано в следующих случаях:
а) если имя-данного-1 представляет группу отчета, на которую имеется ссылка в операторах GENERATE (ГЕНЕРИРОВАТЬ) или USE (ИСПОЛЬЗОВАТЬ) в разделе процедур;
б) если в разделе процедур или секции отчетов необходима ссылка на счетчик суммы;
в) если в варианте UPON (ДЛЯ) фразы SUM (СУММА) имеется ссылка на группу отчета типа фрагмент.
г) если имя-данного-1 необходимо для уточнения счетчика суммы.
3.13. Фраза GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ)
3.13.1. Назначение
Фраза GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ) указывает, что соответствующее печатаемое данное представляется только при первом появлении содержащей его группы после прерывания управления или продвижения страницы.
3.13.2. Общий формат
GROUP INDICATE
ОПРЕДЕЛЯЕТ ГРУППУ
3.13.3. Синтаксические правила
(1) Фраза GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ) должна быть указана только в статье описания группы отчета типа фрагмент, определяющей печатаемое данное.
3.13.4. Общие правила
(1) Если фраза GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ) указана, фразы SOURCE (ИСТОЧНИК) или VALUE (ЗНАЧЕНИЕ) игнорируются и проставляются пробелы во всех случаях, кроме следующих:
а) при первом представлении в отчете соответствующей группы типа фрагмент, или
б) при первом после каждого продвижения страницы представлении соответствующей группы типа фрагмент, или
в) при первом после каждого прерывания управления представлении соответствующей группы типа фрагмент.
(2) Если в статье описания отчета не указана ни фраза RAGE (РАЗМЕР СТРАНИЦЫ), ни фраза CONTROL (УПРАВЛЕНИЕ), печатаемое данное, определяемое фразой GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ), представляется при первом после выполнения оператора INITIATE (НАЧАТЬ) представлении соответствующей группы отчета типа фрагмент. При последующих представлениях этой группы печатаемые данные, описанные с фразой SOURCE (ИСТОЧНИК) или VALUE (ЗНАЧЕНИЕ), представляются пробелами.
3.14. Номер-уровня
3.14.1. Назначение
Номер-уровня указывает позицию данного в иерархической структуре группы отчета.
3.14.2. Общий формат
номер-уровня
3.14.3. Синтаксические правила
(1) Номер-уровня необходим как первый элемент каждой статьи описания данного.
(2) Статьи описания данных, подчиненных статье RD (OO), могут иметь номера уровней только от 01 до 49.
3.14.4. Общие правила
(1) Номер уровня 01 идентифицирует первую статью в группе отчета.
(2) Несколько статей уровня 01, подчиненных статье описания отчета с индикатором уровня RD (OO) не представляют неявное переопределение одной и той же области.
3.15. Фраза LINE NUMBER (НОМЕР СТРОКИ)
3.15.1. Назначение
Фраза LINE NUMBER (НОМЕР СТРОКИ) определяет вертикальное расположение информации соответствующей группы отчета.
3.15.2. Общий формат
3.15.3. Синтаксические правила
(1) Целое-1 и целое-2 должны быть не более чем трехзначными.
Целое-1 и целое-2 должны быть такими, чтобы любая представляемая строка группы отчета находилась в пределах вертикального подразделения страницы, определенного для данного типа группы отчета фразой PAGE (РАЗМЕР СТРАНИЦЫ) (см. п.3.8 настоящей части).
Целое-2 может равняться нулю.
(2) В статье описания группы отчета статья, содержащая фразу LINE NUMBER (НОМЕР СТРОКИ), не должна содержать подчиненную статью с такой же фразой.
(3) В статье описания группы отчета все фразы LINE NUMBER (НОМЕР СТРОКИ), задающие абсолютную позицию (абсолютные фразы), должны предшествовать всем фразам LINE NUMBER (НОМЕР СТРОКИ), задающим относительную позицию (относительным фразам).
(4) В статье описания группы отчетов следующие одна за другой абсолютные фразы LINE NUMBER (НОМЕР СТРОКИ) должны указывать целые в возрастающем порядке. Целые не обязательно должны быть последовательными числами.
(5) Если в статье описания отчета опущена фраза PAGE (РАЗМЕР СТРАНИЦЫ), то в статьях описания групп этого отчета могут указываться только относительные фразы LINE NUMBER (НОМЕР СТРОКИ).
(6) В статье описания группы отчета вариант NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) может указываться только один раз и только в первой фразе LINE NUMBER (НОМЕР СТРОКИ) статьи описания этой группы отчета.
(7) Фраза LINE NUMBER (НОМЕР СТРОКИ) с вариантом NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) может указываться только в описании групп тела отчета и в группе типа концовка отчета.
(8) Каждая статья, определяющая печатаемое данное (см. п.3.11 настоящей части), должна или содержать фразу LINE NUMBER (НОМЕР СТРОКИ), или подчиняться статье, содержащей фразу LINE NUMBER (НОМЕР СТРОКИ).
(9) Первая фраза LINE NUMBER (НОМЕР СТРОКИ), указанная в группе отчета типа концовка страницы должна быть абсолютной фразой.
3.15.4. Общие правила
(1) Для установления каждой печатаемой строки группы отчета должна быть указана фраза LINE NUMBER (НОМЕР СТРОКИ).
(2) СУГО осуществляет вертикальное позиционирование, определяемое фразой LINE NUMBER (НОМЕР СТРОКИ), до представления установленной этой фразой печатаемой строки.
(3) Целое-1 указывает абсолютный номер строки. Абсолютный номер строки определяет номер строки, на которой представляется печатаемая строка.
(4) Целое-2 указывает относительный номер строки. Если относительная фраза LINE NUMBER (НОМЕР СТРОКИ) является не первой фразой LINE NUMBER (НОМЕР СТРОКИ) статьи описания группы отчета, то номер строки, на которой представляется печатаемая строка, определяется как сумма номера строки, на которой была представлена предыдущая печатаемая строка, и целого-2 из относительной фразы LINE NUMBER (НОМЕР СТРОКИ). Если целое-2 равно нулю, строка будет печататься на той же строке, что и печатаемая строка.
Если относительная фраза LINE NUMBER (НОМЕР СТРОКИ) является первой фразой LINE NUMBER (НОМЕР СТРОКИ) в статье описания труппы отчета, то номер строки, на которой представляется печатаемая строка, определяется по специальным правилам (см. п.3.10 настоящей части).
(5) Фраза NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) указывает, что группа отчета будет представлена начиная с указанного номера строки на новой странице (см. п.3.10 настоящей части).
3.16. Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА)
3.16.1. Назначение
Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) задает информацию о вертикальном позиционировании на странице после представления последней строки группы отчета.
3.16.2. Общий формат
3.16.3. Синтаксические правила
(1) Статья описания группы отчета не должна содержать фразу NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), если описание этой группы отчета не содержит хотя бы одну фразу LINE NUMBER (НОМЕР СТРОКИ).
(2) Целое-1 и целое-2 не должны быть больше чем трехзначными числами.
(3) Если в статье описания отчета опущена фраза PAGE (РАЗМЕР СТРАНИЦЫ), то в любой статье описания группы этого отчета может быть указана только относительная фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА).
(4) Вариант NEXT PAGE (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ) фразы NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) не может быть указан в группе отчета типа концовка страницы.
(5) Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) не может быть указана для групп типа концовка отчета или заголовок страницы.
3.16.4. Общие правила
(1) Позиционирование страницы, указанное фразой NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА), выполняется после представления группы отчета, в описании которой эта фраза указана (см. п.3.10 настоящей части).
(2) Для определения нового значения LINE-COUNTER (СЧЕТЧИК-СТРОК) СУГО использует информацию о вертикальном позиционировании, задаваемую фразой NEVXT GROUP (СЛЕДУЮЩАЯ ГРУППА) и фразами TYPE (ТИП) и PAGE (RA3MEP СТРАНИЦЫ), и текущие значение LINE-COUNTER (СЧЕТЧИК-СТРОК) (см. п.3.10 настоящей части).
(3) Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) игнорируется СУГО, если она указана для группы отчета типа управляемая концовка, уровень которой отличается от наивысшего уровня, на котором обнаружено прерывание управления.
(4) Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) группы отчета относится к группе тела отчета, которая должна быть представлена следующей, и поэтому может влиять на расположение следующей группы тела при ее представлении. Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) группы типа заголовок отчета может влиять на расположение группы типа заголовок страницы при ее представлении. Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) группы типа концовка страницы может влиять на расположение группы типа концовка отчета при ее представлении (см. п.3.10 настоящей части).
3.17. Фраза SIGN (ЗНАК)
3.17.1. Назначение
Фраза SIGN (ЗНАК) определяет позицию и представление знака числа, если имеется необходимость описать это явно.
3.17.2. Общий формат
3.17.3. Синтаксические правила
(1) Фраза SIGN (ЗНАК) может быть указана только в статье описания числового данного, шаблон которого содержит литеру S (З).
(2) Статьи описания числовых данных, к которым относится фраза SIGN (ЗНАК), должны быть описаны, явно или неявно, с USAGE IS DISPLAY (ДЛЯ ВЫДАЧИ).
(3) Если фраза SIGN (ЗНАК) включена в статью описания группы отчета, должен быть указан вариант SEPARATE CHARACTER (ОТДЕЛЬНО)
3.17.4. Общие правила
(1) Необязательная фраза SIGN (ЗНАК), если имеется, указывает в статье описания числового данного позицию и представление знака числа этого данного. Фраза SIGN (ЗНАК) применяется только к статьям описания числовых данных, шаблон которых содержит литеру S (З); S (З) указывает на наличие (но не на представление или позицию) знака числа.
(2) Для числового данного, в статье описания которого не содержится фраза SIGN (ЗНАК), а шаблон содержит литеру S (З) предполагается знак числа, но ни позиция, ни представление знака числа литерой S (З) не определяются. В этом случае реализация определяет позицию и представление знака числа. Общее правило (З) не применяется к данным, описанным таким образом.
(3) Поскольку фраза SIGN (ЗНАК) в статье описания группы отчета должна содержать вариант SEPARATE CHARACTER (ОТДЕЛЬНО), то:
а) предполагается, что знак числа будет занимать позицию первой (или, соответственно, последней) литеры элементарного числового данного; эта позиция литеры не является цифровой позицией;
б) литера S (З) в строке литер шаблона учитывается при определении размера данного (в терминах литер стандартного формата данных);
в) знаками числа для положительных и отрицательных чисел являются литеры стандартного формата данных "+" и "-" соответственно.
(4) Каждая статья описания числового данного, содержащая шаблон с литерой S (З), является статьей описания числового данного со знаком. Если фраза SIGN (ЗНАК) относится к такой статье, и для вычислений или сравнения необходимо преобразование, преобразование производится автоматически.
3.18. Фраза SOURCE (ИСТОЧНИК)
3.18.1. Назначение
Фраза SOURCE (ИСТОЧНИК) идентифицирует посылаемое данное, которое помещается в соотнесенное ему печатаемое данное, определенное в статье описания группы отчета.
3.18.2. Общий формат
SOURCE IS идентификатор-1
ИСТОЧНИК идентификатор-1
3.18.3. Синтаксические правила
(1) Идентификатор-1 может быть определен в любой секции раздела данных. Если идентификатор-1 является данным, определенным в секции отчетов, то это должен быть:
а) счетчик строк или
б) счетчик страниц, или
в) счетчик суммы в том же отчете, в котором указана фраза SOURCE (ИСТОЧНИК).
(2) Идентификатор-1 указывает посылаемое данное неявного оператора MOVE (ПОМЕСТИТЬ), выполняемого СУГО для пересылки данного, указанного идентификатором-1, в печатаемое данное. Идентификатор-1 должен быть определен в соответствии с правилами для посылаемых данных оператора MOVE (ПОМЕСТИТЬ) (см. ч.6, п.6.19).
3.18.4. Общие правила
(1) СУГО формирует печатаемые строки группы отчета непосредственно перед представлением группы отчета (п.3.20 настоящей части). При этом выполняются неявные операторы MOVE (ПОМЕСТИТЬ), определенные фразами SOURCE (ИСТОЧНИК).
3.19. Фраза SUM (СУММА)
3.19.1. Назначение
Фраза SUM (СУММА) устанавливает счетчик суммы и указывает имена данных, подлежащих суммированию.
3.19.2. Общий формат
3.19.3. Синтаксические правила
(1) Данное, являющееся субъектом статьи описания группы отчета с фразой SUM (СУММА), не может быть определено как буквенно-цифровое. Идентификатор-1 должен ссылаться на числовое данное. Если идентификатор-1 определен в секции отчетов, идентификатор-1 должен представлять счетчик суммы.
Если фраза UPON (ДЛЯ) опущена, то указанные во фразе SUM (СУММА) идентификаторы, представляющие в свою очередь счетчики сумм, должны быть определены либо в той же группе отчета, которая содержит эту фразу SUM (СУММА), либо в группе отчета, находящейся на более низком уровне управляющей иерархии этого отчета.
Если указана фраза UPON (ДЛЯ), то идентификаторы, указанные во фразе SUM (СУММА), не могут представлять счетчики сумм.
(2) Имя-данного-1 должно быть именем группы отчета типа фрагмент, описанной в том же отчете, что и группа типа управляемая концовка, описание которой содержит фразу SUM (СУММА). Имя-данного-1 может уточняться именем-отчета.
(3) Фраза SUM (СУММА) может появляться только в описании группы отчета типа управляемая концовка.
(4) Имя-данного-2 должно быть одним из имен данных, указанных во фразе CONTROL (УПРАВЛЕНИЕ) для данного отчета. Уровень управления для имени-данного-2 не может быть ниже уровня управления, соответствующего группе отчета, в описании которой появляется вариант RESET (СБРОСИТЬ)
Если указана фраза RESET ON FINAL (СБРОСИТЬ ПО КОНЦУ), то для этого отчета должна быть также указана фраза CONTROL (УПРАВЛЕНИЕ).
(5) Наивысшим допустимым уточнителем для счетчика суммы является имя-отчета.
3.19.4. Общие правила
(1) Фраза SUM (СУММА) уточняет счетчик суммы. Счетчик суммы является порожденным компилятором числовым данным со знаком. Размер и положение десятичной точки счетчика суммы зависят от категории данного, определенного статьей описания группы отчета с фразой SUM (СУММА). Размер и положение десятичной точки определяются следующим образом:
а) если соответствующее данное числовое, размер и положение десятичной точки счетчика суммы такие же как и этого данного;
б) если соответствующее данное числовое редактируемое, размер счетчика суммы равняется числу цифровых позиций этого данного и положение десятичной точки такое же, как и в этом данном;
в) если соответствующее данное буквенно-цифровое или буквенно-цифровое редактируемое, размер счетчика суммы равняется размеру этого данного за исключением литер редактирования, или 18 литерам (меньшему из них), и счетчик суммы является целым.
(2) Во время выполнения СУГО прибавляет к счетчику суммы значение каждого данного, на которое ссылается идентификатор-1. Это сложение согласуется с правилами для арифметических операторов (см. ч.6, пп.6.4.4, 6.4.5).
(3) Статье описания элементарного данного отчета соответствует только один счетчик суммы, независимо от количества фраз SUM (СУММА), указанных в этой статье.
(4) Если статья описания элементарного печатаемого данного отчета содержит фразу SUM (СУММА), счетчик суммы служит в качестве данного-источника. СУГО помещает данное, содержащееся в счетчике суммы, в печатаемое данное для представления согласно правилам оператора MOVE (ПОМЕСТИТЬ).
(5) Если имя-данного появляется как субъект статьи описания элементарного данного отчета, содержащей фразу SUM (СУММА), имя-данного является именем счетчика суммы, имя-данного не является именем печатаемого данного, которое также может определяться этой статьей.
(6) Значения счетчиков сумм допустимо изменять с помощью операторов раздела процедур.
(7) Суммирование в счетчиках сумм значений данных, представленных идентификаторами, осуществляется системой управления генератором отчетов во время выполнения операторов GENERATE (ГЕНЕРИРОВАТЬ) и TERMINATE (ЗАКОНЧИТЬ). Имеются три категории увеличения счетчика суммы, называемые подытоживанием, концовочным суммированием и нарастающим итогом. Подытоживание исполняется только во время выполнения операторов GENERATE (ГЕНЕРИРОВАТЬ) и после обработки любого прерывания управления, но до обработки группы отчета типа фрагмент (см. п.4.3 настоящей части). Концовочное суммирование и нарастающий итог исполняются во время обработки групп отчета типа управляемая концовка (п.3.20 настоящей части).
(8) Вариант UPON (ДЛЯ) обеспечивает возможность выполнять выборочное подытоживание только для тех групп отчета типа фрагмент, на которые ссылаются в этом варианте.
(9) Момент времени в который СУГО прибавляет каждое слагаемое к счетчику суммы, зависит от характеристик слагаемого:
а) если слагаемое является счетчиком суммы, определенным в той же группе отчета типа управляемая концовка, то накопление этого слагаемого в счетчике суммы определяется как концовочное суммирование.
Концовочное суммирование происходит, когда имеют место прерывание управления и обработка группы отчета типа управляемая концовка.
Концовочное суммирование выполняется соответственно после-последовательности, в которой определены счетчики сумм в группе отчета управляемая концовка. Это значит, что завершается все концовочное суммирование в первом счетчике суммы, определенном в группе отчета управляемая концовка, а затем завершается все концовочное суммирование во втором счетчике суммы, определенном в группе отчета типа управляемая концовка. Эта процедура повторяется пока не завершаются все операции концовочного суммирования.
Если одно из слагаемых является счетчиком суммы, определенным статьей описания данного, содержащей фразу SUM (СУММА), во время суммирования используется начальное значение этого счетчика;
б) если слагаемое является счетчиком суммы, определенным в группе отчета типа управляемая концовка с более низким уровнем в иерархии управления, накопление этого слагаемого в счетчике суммы определяется как нарастающее суммирование. Счетчик суммы в группе отчета типа управляемая концовка на более низком уровне иерархии управления наращивается, когда имеют место прерывание управления и обработка группы отчета типа управляемая концовка для этого уровня в иерархии управления;
в) если слагаемое не является счетчиком суммы, накопление в счетчике суммы такого рода слагаемого определяется как подытоживание. Если фраза SUM (СУММА) содержит вариант UPON (ДЛЯ) слагаемые накапливаются при выполнении оператора GENERATE (ГЕНЕРИРОВАТЬ) для указанных групп отчета типа фрагмент. Если фраза SUM (СУММА) указана без варианта UPON (ДЛЯ), слагаемые, не являющиеся счетчиками сумм, накапливаются при выполнении любого оператора GENERATE имя-данного (ГЕНЕРИРОВАТЬ имя-данного) для отчета, в описании которого указана фраза SUM (СУММА).
(10) Если два или более идентификаторов ссылаются на одно и то же слагаемое, это слагаемое прибавляется к счетчику суммы столько раз, сколько раз на него имеется ссылка во фразе SUM (СУММА). Допустимо в варианте UPON (ДЛЯ) указывать два или больше имен-данных, ссылающихся на одну и ту же группу типа фрагмент. Если для такой группы типа фрагмент задан оператор GENERATE имя-данного (ГЕНЕРИРОВАТЬ имя-данного), суммирование выполняется повторно столько раз, сколько раз это имя-данного появляется в варианте UPON (ДЛЯ).
(11) Подытоживание при выполнении оператора GENERATE имя-отчета (ГЕНЕРИРОВАТЬ имя-отчета) описано ниже (п.4.3 настоящей части).
(12) При отсутствии явного варианта RESET (СБРОСИТЬ) СУГО устанавливает счетчик суммы в нуль во время обработки группы отчета типа управляемая концовка, в которой определяется счетчик суммы. Если указан явный вариант RESET (СБРОСИТЬ), СУГО устанавливает счетчик суммы в нуль во время обработки соответствующего уровня управляющей иерархии (п.3.20 настоящей части).
Счетчики сумм первоначально устанавливаются СУГО в нуль во время выполнения оператора INITIATE (НАЧАТЬ) для отчета, в котором они определены.
3.20. Фраза TYPE (ТИП)
3.20.1. Назначение
Фраза TYPE (ТИП) определяет, к какому типу принадлежит группа отчета, описание которой содержит эту фразу, и указывает время, в которое группа отчета должна обрабатываться СУГО.
3.20.2. Общий формат
3.20.3. Синтаксические правила
(1) RH (ЗО) является сокращением REPORT HEADING (ЗАГОЛОВОК ОТЧЕТА).
РН (ЗС) является сокращением PAGE HEADING (ЗАГОЛОВОК СТРАНИЦЫ).
СН (УЗ) является сокращением CONTROL HEADING (УПРАВЛЯЕМЫЙ ЗАГОЛОВОК).
DE (ФР) является сокращением DETAIL (ФРАГМЕНТ).
CF (УК) является сокращением CONTROL FOOTING (УПРАВЛЯЕМАЯ КОНЦОВКА).
PF (КС) является сокращением PAGE FOOTING (КОНЦОВКА СТРАНИЦЫ).
RF (КО) является сокращением REPORT FOOTING (КОНЦОВКА ОТЧЕТА).
(2) Каждая из групп отчета, определяемая фразами REPORT HEADING (ЗАГОЛОВОК ОТЧЕТА), PAGE HEADING (ЗАГОЛОВОК СТРАНИЦЫ), CONTROL HEADING FINAL (УПРАВЛЯЕМЫЙ ЗАГОЛОВОК ПО КОНЦУ), CONTROL FOOTING FINAL (УПРАВЛЯЕМАЯ КОНЦОВКА ПО КОНЦУ), PAGE FOOTING (КОНЦОВКА СТРАНИЦЫ) и REPORT FOOTING (КОНЦОВКА ОТЧЕТА) может указываться в описании отчета не более одного раза.
(3) Группы отчета типа заголовок страницы и концовка страницы могут быть указаны только тогда, когда в статье описания соответствующего отчета указана фраза PAGE (РАЗМЕР СТРАНИЦЫ).
(4) Имя-данного-1, имя-данного-2 и FINAL (ПО КОНЦУ), если указаны в фразе TYPE (ТИП), должны быть указаны и во фразе CONTROL (УПРАВЛЕНИЕ) соответствующей статьи описания отчета. Для каждого из указанных во фразе CONTROL (УПРАВЛЕНИЕ) статьи описания отчета имен-данных или FINAL (ПО КОНЦУ) может быть определено не более одной группы отчета типа управляемый заголовок и не более одной группы типа управляемая концовка. Тем не менее ни группа отчета типа управляемый заголовок, ни группа отчета типа управляемая концовка не являются обязательными для имени-данного или FINAL (ПО КОНЦУ), указанных во фразе CONTROL (УПРАВЛЕНИЕ) статьи описания отчета.
(5) В группах отчета типа управляемая концовка, заголовок страницы, концовка страницы и концовка отчета фразы SOURCE (ИСТОЧНИК) и соответствующие операторы USE (ИСПОЛЬЗОВАТЬ) не могут ссылаться на следующие данные:
а) групповые данные, содержащие управляющее данное;
б) данные, подчиненные управляющему данному;
в) данные, переопределяющие или переименовывающие любые позиции управляющего данного.
В группах отчета типа заголовок страницы и концовка страницы фразы SOURCE (ИСТОЧНИК) и операторы USE (ИСПОЛЬЗОВАТЬ) не могут ссылаться на имена управляющих данных.
(6) Если в разделе процедур указан оператор GENERATE имя-отчета (ГЕНЕРИРОВАТЬ имя-отчета), соответствующая статья описания отчета должна содержать не более одной группы отчета типа фрагмент. Если для такого отчета не указан ни один оператор GENERATE имя-данного (ГЕНЕРИРОВАТЬ имя-данного), группа отчета типа фрагмент может не определяться.
(7) Описание отчета должно включать по крайней мере одну группу тела отчета.
3.20.4. Общие правила
(1) Группы отчета типа фрагмент порождаются СУГО как прямой результат операторов GENERATE (ГЕНЕРИРОВАТЬ). Обработка групп отчета других типов является автоматической функцией СУГО.
(2) Вариант REPORT HEADING (ЗАГОЛОВОК ОТЧЕТА) указывает группу отчета, порождаемую СУГО только один раз в отчете как первую группу этого отчета. Группа типа заголовок отчета порождается в момент выполнения первого по времени оператора GENERATE (ГЕНЕРИРОВАТЬ) для этого отчета.
(3) Вариант PAGE HEADING (ЗАГОЛОВОК СТРАНИЦЫ) указывает группу отчета, которая порождается СУГО как первая группа для каждой страницы этого отчета, кроме следующих случаев:
а) группа отчета типа заголовок страницы не порождается для страницы, которая должна содержать только группу типа заголовок отчета или концовка отчета;
б) группа типа заголовок страницы порождается как вторая группа отчета для страницы, когда ей предшествует группа типа заголовок отчета, которая не представляется на отдельной странице (см. п.3.10 настоящей части).
(4) Вариант CONTROL HEADING (УПРАВЛЯЕМЫЙ ЗАГОЛОВОК) указывает группу отчета, которая обрабатывается СУГО в начале управляемой группы и соотнесена управляющему имени-данного или управлению FINAL (ПО КОНЦУ) и порождается в момент выполнения первого по времени оператора GENERATE (ГЕНЕРИРОВАТЬ) для этого отчета. При выполнении любого оператора GENERATE (ГЕНЕРИРОВАТЬ), если СУГО обнаруживает прерывание управления, порождаются группы отчета типа управляемый заголовок, соотнесенные наивысшему обнаруженному уровню прерывания управления и более низким уровням.
(5) Вариант DETAIL (ФРАГМЕНТ) указывает группу отчета, порождаемую СУГО при выполнении соответствующего оператора GENERATE (ГЕНЕРИРОВАТЬ).
(6) Вариант CONTROL FOOTING (УПРАВЛЯЕМАЯ КОНЦОВКА) указывает группу отчета, порождаемую СУГО в конце управляемой группы для соответствующего управляющего имени-данного.
В случае управления FINAL (ПО КОНЦУ) группа типа управляемая концовка порождается только один, раз в отчете как последняя группа тела этого отчета. При выполнении любого оператора GENERATE (ГЕНЕРИРОВАТЬ), если СУГО обнаруживает прерывание управления, порождается группа отчета типа управляемая концовка, соотнесенная наивысшему уровню прерывания управления и более низким уровням. Если для некоторого отчета был выполнен хотя бы один оператор GENERATE (ГЕНЕРИРОВАТЬ), то при выполнении оператора TERMINATE (ЗАКОНЧИТЬ) порождаются все группы типа управляемая концовка для этого отчета (см. п.4.7 настоящей части).
(7) Вариант PAGE FOOTING (КОНЦОВКА СТРАНИЦЫ) указывает группу отчета, которая порождается СУГО как последняя группа отчета на каждой странице за исключением следующих случаев:
а) группа отчета типа концовка страницы не порождается для страницы, которая должна содержать только группу типа заголовок отчета или только группу типа концовка отчета;
б) группа типа концовка страницы порождается как предпоследняя группа отчета на странице, если за ней следует группа типа концовка отчета, не представляемая на отдельной странице (см. п.3.10 настоящей части).
(8) Вариант REPORT FOOTING (КОНЦОВКА ОТЧЕТА) указывает группу отчета, которая порождается СУГО только один раз в отчете как последняя группа этого отчета. Группа типа концовка отчета порождается во время выполнения соответствующего оператора TERMINATE (ЗАКОНЧИТЬ), если до этого был выполнен хотя бы один оператор GENERATE (ГЕНЕРИРОВАТЬ) для этого отчета (см. п.4.7 настоящей части).
(9) При порождении групп отчета типа заголовок отчета, заголовок страницы, управляемый заголовок, концовка страницы или концовка отчета СУГО выполняет последовательность действий, описанных ниже:
а) если указана процедура USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) со ссылкой на имя-данного группы отчета, выполняется процедура, определяемая оператором USE (ИСПОЛЬЗОВАТЬ);
б) если был выполнен оператор SUPPRESS (ПОДАВИТЬ) или группа отчета не печатаемая, дальнейшая обработка группы отчета не производится;
в) если оператор SUPPRESS (ПОДАВИТЬ) не был выполнен и группа отчета печатаемая, СУГО формирует печатаемые строки и представляет группу отчета соответственно правилам представления для группы отчета этого типа (см. п.3.10 настоящей части).
(10) Ниже приводится последовательность действий, выполняемых СУГО при порождении группы типа управляемая концовка.
Правила для оператора GENERATE (ГЕНЕРИРОВАТЬ) указывают, что при распознавании прерывания управления СУГО порождает группы отчета типа управляемая концовка начиная от самого низкого уровня в порядке возрастания до наивысшего уровня прерывания управления. При этом нужно отметить, что если фраза RESET (СБРОСИТЬ) в описании отчета указывает управляющее имя-данного, выполняются действия, описанные в п.10е, даже если для этого управляющего имени-данного не определена группа отчета типа управляемая концовка.
а) Производится концовочное суммирование, т.е. все счетчики сумм, определенные в этой группе отчета, являющиеся операндами фраз SUM (СУММА) в этой же группе отчета, прибавляются к порождаемым этими фразами счетчикам сумм (см. п.3.19 настоящей части).
б) Производится нарастающее суммирование, т.е. все счетчики сумм, определенные в этой группе отчета, являющиеся операндами фраз SUM (СУММА) в группах отчета типа управляемая концовка, относящихся к более высоким уровням иерархии управления, прибавляются к порождаемым этими фразами счетчикам сумм (см. п.3.19 настоящей части).
в) Если имеется процедура USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) со ссылкой на имя-данного группы отчета, выполняется процедура, определенная оператором USE (ИСПОЛЬЗОВАТЬ).
г) Если был выполнен оператор SUPPRESS (ПОДАВИТЬ) или труппа отчета непечатаемая, СУГО следующими выполняет действия, описанные в п.10е ниже.
д) Если оператор SUPPRESS (ПОДАВИТЬ) не был выполнен и группа отчета печатаемая, СУГО формирует печатаемые строки и представляет группу отчета соответственно правилам представления для групп отчета типа управляемая концовка.
е) Затем СУГО сбрасывает те счетчики сумм, обновление которых должно выполняться при обработке этого уровня иерархии управления (см. п.3.19 настоящей части).
(11) Обработка группы отчета типа фрагмент, выполняемая по оператору GENERATE имя-отчета (ГЕНЕРИРОВАТЬ имя-отчета), описана в п.11а-11д ниже.
Если в описании отчета указана только одна группа отчета типа фрагмент, обработка фрагмента выполняется генератором отчетов по оператору GENERATE имя-отчета (ГЕНЕРИРОВАТЬ имя-отчета) в соответствии с п.11а-11д, описанными ниже. Эти действия выполняются так, как если бы выполнялся оператор GENERATE имя-данного (ГЕНЕРИРОВАТЬ имя-данного) для этого фрагмента.
Если в описании отчета нет ни одной группы отчета типа фрагмент, обработка, выполняемая по оператору GENERATE имя-отчета (ГЕНЕРИРОВАТЬ имя-отчета), описана в 11а.
Это действие выполняется так, как если бы описание отчета содержало только одну группу отчета типа фрагмент и выполнялся бы оператор GENERATE имя-данного (ГЕНЕРИРОВАТЬ имя-данного).
а) Выполняется любое подытоживание, предназначенное для определенной группы отчета типа фрагмент (см. п.3.19 настоящей части).
б) Если имеется процедура USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) со ссылкой на имя-данного группы отчета, выполняется процедура USE (ИСПОЛЬЗОВАТЬ).
в) Если был выполнен оператор SUPPRESS (ПОДАВИТЬ) или группа отчета непечатаемая, то ее дальнейшая обработка не производится.
г) Если группа отчета типа фрагмент порождается по оператору GENERATE имя-отчета (ГЕНЕРИРОВАТЬ имя-отчета), дальнейшая обработка группы отчета не производится.
д) Если ни 11в, ни 11г не применяются, формируются печатаемые строки и группа отчета представляется соответственно правилам представления для групп отчета типа фрагмент (см. п.3.10 настоящей части).
(12) При обработке групп отчета типа управляемый заголовок, управляемая концовка или фрагмент (см. общие правила 9, 10, 11), СУГО может прерывать обработку этой группы тела после установления, что эта группа должна быть представлена, и выполнить переход на следующую страницу (и, соответственно, порождение групп отчета типа концовка страницы или заголовок страницы) до представления группы тела.
(13) При обработке прерывания управления значения управляющих данных, которые использовались СУГО для обнаружения прерывания управления, будут называться предыдущими значениями.
а) При обработке по прерыванию управления группы отчета типа управляемая концовка любые ссылки на управляющие данные в процедуре, определенной оператором USE (ИСПОЛЬЗОВАТЬ) или фразе SOURCE (ИСТОЧНИК), связанные с этой группой типа управляемая концовка, относятся к предыдущим значениям.
б) При выполнении оператора TERMINATE (ЗАКОНЧИТЬ) и при порождении групп отчета типа управляемая концовка и концовка отчета СУГО обеспечивает доступность набора предыдущих значений управляющих данных фразе SOURCE (ИСТОЧНИК) или ссылкам процедуры, определенной оператором USE (ИСПОЛЬЗОВАТЬ), как если бы прерывание управления было распознано для управляющего имени-данного самого старшего уровня.
в) Ссылки на все остальные данные в группах отчета и относящихся к ним процедурах операторов USE (ИСПОЛЬЗОВАТЬ) относятся к текущим значениям данных во время обработки этой группы отчета.
3.21. Фраза USAGE (ОБ ИСПОЛЬЗОВАНИИ)
3.21.1. Назначение
Фраза USAGE (об использовании) определяет формат данного в памяти машины.
3.21.2. Общий формат
[ USAGE IS] DISPLAY
ДЛЯ ВЫДАЧИ
3.21.3. Синтаксические правила
(1) Фраза USAGE (об использовании) может быть записана в любой статье описания данного.
(2) Если фраза USAGE (об использовании) записана в статье описания группового данного, она может быть также записана в статье описания подчиненного элементарного данного или группового данного.
(3) Фраза USAGE (об использовании) для группы отчета может определять только USAGE IS DISPLAY (ДЛЯ ВЫДАЧИ).
3.21.4. Общие правила
(1) Если фраза USAGE (об использовании) записана на уровне группового данного, она относится к каждому элементарному данному в группе.
(2) Фраза USAGE (об использовании) указывает, в каком виде представлено данное в памяти машины. Это не влияет на использование данного, хотя спецификации некоторых операторов в разделе процедур могут накладывать ограничения на фразу об использовании для операндов, на которые имеются ссылки в операторах. Фраза USAGE (об использовании) может влиять на основание системы счисления и тип представления литер данного.
(3) Фраза USAGE IS DISPLAY (ДЛЯ ВЫДАЧИ) указывает, что формат данного является стандартным форматом данного.
(4) Если фраза USAGE (об использовании) не указана для элементарного данного или для любой группы, к которой принадлежит данное, предполагается неявная фраза DISPLAY (ДЛЯ ВЫДАЧИ).
3.22. Фраза VALUE (ЗНАЧЕНИЕ)
3.22.1. Назначение
Фраза VALUE (ЗНАЧЕНИЕ) определяет значение печатаемого данного секции отчетов.
3.22.2. Общий формат
3.22.3. Синтаксические правила
(1) Числовой литерал со знаком должен соответствовать строке литер шаблона числового данного со знаком.
(2) Числовой литерал во фразе VALUE (ЗНАЧЕНИЕ) должен иметь значение из диапазона значений, указанного фразой PICTURE (ШАБЛОН) и не может иметь значение, которое могло бы потребовать усечения ненулевых цифр. Нечисловой литерал во фразе VALUE (ЗНАЧЕНИЕ) данного должен не превышать размер, указанный во фразе PICTURE (ШАБЛОН).
3.22.4. Общие правила
(1) Фраза VALUE (ЗНАЧЕНИЕ) не должна противоречить другим фразам в описании данного или в описании иерархии данного. Применяются следующие правила:
а) если категория данного числовая, литерал-1 во фразе VALUE (ЗНАЧЕНИЕ) должен быть числовым;
б) если категория данного буквенная, буквенно-цифровая, буквенно-цифровая редактируемая или числовая редактируемая, литерал-1 во фразе VALUE (ЗНАЧЕНИЕ) должен быть нечисловым литералом. Литерал выравнивается в данном как если бы данное было описано как буквенно-цифровое (см. ч.4, п.4.3.6). Литеры редактирования во фразе PICTURE (ШАБЛОН) учитываются при определении размера данного, но не влияют на инициацию данного (см. ч.6, п.5.9). Поэтому значение для редактируемого данного должно быть указано в отредактированной форме;
в) на инициацию не влияют фразы BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) или JUSTIFIED (СДВИНУТО), которые могут быть указаны.
(2) Если в секции отчетов элементарная статья отчета, содержащая фразу VALUE (ЗНАЧЕНИЕ), не содержит фразу GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ), то печатаемому данному присваивается указанное значение каждый раз при печати соответствующей группы отчета. Однако если кроме фразы VALUE (ЗНАЧЕНИЕ) имеется также фраза GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ), указанное значение представляется только при существовании определенных условий во время выполнения (см. п.3.13 настоящей части).
4. РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ ГЕНЕРАТОРА ОТЧЕТОВ
4.1. Общее описание
Если в исходной Кобол-программе имеется оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) модуля генератора отчетов, раздел процедур содержит декларативные процедуры. Ниже приведен общий формат раздела процедур, когда имеется оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) и (или) USE AFTER STANDARD EXCEPTION PROCEDURE (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
4.2. Оператор CLOSE (ЗАКРЫТЬ)
4.2.1. Назначение
Оператор CLOSE (ЗАКРЫТЬ) завершает обработку катушек (томов) и файлов с необязательной перемоткой и (или) замком или удалением, где это применимо.
4.2.2. Общий формат
4.2.3. Синтаксические правила
(1) Файлы, на которые ссылается оператор CLOSE (ЗАКРЫТЬ), могут иметь различную организацию или доступ.
(2) Допустимость вариантов в операторе CLOSE (ЗАКРЫТЬ) зависит от уровня модуля последовательного ввода-вывода, поддерживаемого реализацией (см. ч.7, п.4.2).
4.2.4. Общие правила
За исключением особо оговоренных случаев в ниже приведенных общих правилах, термины "катушка" и "том" являются синонимами и полностью взаимозаменяемы в операторе CLOSE (ЗАКРЫТЬ). Интерпретация последовательных файлов массовой памяти логически эквивалентна интерпретации файлов на ленте или аналогичных последовательных носителях. Файл, содержащийся в многофайловой ленточной среде, логически рассматривается как последовательный однокатушечный (однотомный) файл.
(1) Оператор CLOSE (ЗАКРЫТЬ) может быть выполнен только для файла, который был открыт.
(2) Для того, чтобы показать действие различных типов оператора CLOSE (ЗАКРЫТЬ) для различных носителей данных, все файлы отчетов разделяются на следующие категории:
а) без катушек (томов). Файл, носитель которого такой, что для него понятие перемотки катушек (томов) не имеет смысла;
б) последовательный однокатушечный (однотомный). Последовательный файл, который полностью располагается на одной катушке (томе);
в) последовательный многокатушечный (многотомный). Последовательный файл, который располагается на нескольких катушках (томах).
(3) Результаты выполнения каждого типа оператора CLOSE (ЗАКРЫТЬ) для каждой категории файла приведены в таблице.
Значения символов А-З в таблице приведены ниже.
Формат оператора GLOSE (ЗАКРЫТЬ) | Категория файла | ||
Без катушек (томов) | Последовательный однокатушечный (однотомный) | Последовательный многокатушечный (многотомный) | |
CLOSE (ЗАКРЫТЬ) | В | В, Ж | А, В, Ж |
CLOSE WITH LOCK (ЗАКРЫТЬ С ЗАМКОМ) | В, Д | В, Д, Ж | А, В, Д, Ж |
CLOSE WITH NO REWIND (ЗАКРЫТЬ БЕЗ ПЕРЕМОТКИ) | В, З | Б, В | А, Б, В |
CLOSE REEL/UNIT (ЗАКРЫТЬ КАТУШКУ/ТОМ) | Е | Е, Ж | Е, Ж |
CLOSE REEL/UNIT FOR REMOVAL (ЗАКРЫТЬ КАТУШКУ/ТОМ С УДАЛЕНИЕМ) | Е | Г, Е, Ж | Г, Е, Ж |
А. Влияние на обработанные ранее катушки (тома) выходного файла отчетов.
Все катушки (тома) в файле отчетов, предшествующие текущей катушке (тому), закрываются, если для них не выполнялся оператор CLOSE REEL (ЗАКРЫТЬ КАТУШКУ) или CLOSE UNIT (ЗАКРЫТЬ ТОМ).
Б. Текущая катушка не перематывается.
Текущая катушка (том) остается в текущей позиции.
В. Закрыть выходной файл отчетов.
Если для файла указаны записи меток, метки обрабатываются в соответствии со стандартной процедурой обработки меток, определенной реализацией. Действия оператора CLOSE (ЗАКРЫТЬ) не определены, если записи меток указаны, но отсутствуют, или когда записи меток не указаны, но присутствуют.
Если записи меток не указаны для файла отчетов, метки не обрабатываются, но выполняются операции закрытия, определенные реализацией.
Г. Удаление катушки (тома).
Если это применимо, производится перемотка текущей катушки или тома и логическое удаление их из единицы исполнения, однако, катушка или том могут стать снова доступными в порядке расположения катушек или томов в файле отчета, если за выполнением оператора CLOSE (ЗАКРЫТЬ) без варианта REEL (КАТУШКУ) или UNIT (ТОМ) для этого файла отчетов будет выполнен оператор OPEN (ОТКРЫТЬ) для этого же файла отчетов.
Д. Закрыть с замком.
Файл отчетов закрывается (запирается) и не может быть открыт во время выполнения данной единицы исполнения.
Е. Закрыть катушку или том.
Выходной файл отчетов (носитель в виде катушки или тома).
Выполняются следующие операции:
1) стандартная процедура обработки конечных меток катушки или тома;
2) смена катушки (тома). Указатель текущего тома обновляется и указывает на новую катушку (том);
3) Выполняется стандартная процедура обработки начальных меток катушки (тома);
4) Следующая операция занесения записи, относящаяся к этому файлу, заносит следующую логическую запись на следующую катушку (том) файла.
Выходной файл отчета (носитель не в виде катушки или тома).
Выполнение этого оператора считается успешным. Файл остается открытым, и никакие действия, кроме указанных в общем правиле 4, не выполняются.
Ж. Перемотка.
Текущая катушка или аналогичное устройство устанавливается на физическое начало.
Оператор CLOSE (ЗАКРЫТЬ) выполняется так, как будто нет необязательных фраз.
(4) Выполнение оператора CLOSE (ЗАКРЫТЬ) приводит к обновлению значения состояния ввода-вывода, связанного с именем файла-1 (см. ч.7, п.1.3.5).
(5) Все начатые отчеты, связанные с файлом отчетов, должны быть закончены посредством выполнения оператора TERMINATE (ЗАКОНЧИТЬ) до выполнения оператора CLOSE (ЗАКРЫТЬ) для этого файла отчетов.
(6) После успешного завершения оператора CLOSE (ЗАКРЫТЬ) без фразы REEL (КАТУШКУ) или UNIT (ТОМ) файл отчетов больше не входит в число открытых файлов и файл отчетов больше не связан с определителем файла.
(7) Если в операторе CLOSE (ЗАКРЫТЬ) указано более одного имени-файла-1, результат выполнения этого оператора CLOSE (ЗАКРЫТЬ) такой же, как если бы отдельный оператор CLOSE (ЗАКРЫТЬ) был написан для каждого имени-файла-1 в том же порядке, в каком эти имена файлов указаны в операторе CLOSE (ЗАКРЫТЬ).
4.3. Оператор GENERATE (ГЕНЕРИРОВАТЬ)
4.3.1. Назначение
Оператор GENERATE (ГЕНЕРИРОВАТЬ) побуждает СУГО составить отчет в соответствии с описанием этого отчета в секции отчетов раздела данных.
4.3.2. Общий формат
4.3.3. Синтаксические правила
(1) Имя-данного-1 должно относиться к группе отчета типа фрагмент и может уточняться именем отчета.
(2) Имя-отчета-1 может использоваться только тогда, когда в описании этого отчета содержится:
а) фраза CONTROL (УПРАВЛЕНИЕ) и
б) не более одной группы отчета типа фрагмент, и
в) по крайней мере одна группа тела отчета.
4.3.4. Общие правила
(1) По оператору GENERATE имя-отчета-1 (ГЕНЕРИРОВАТЬ имя-отчета-1) СУГО выполняет итоговую обработку. Если все выполняемые для отчета операторы GENERATE (ГЕНЕРИРОВАТЬ) имеют вид GENERATE имя-отчета-1 (ГЕНЕРИРОВАТЬ имя-отчета-1), то составляемый отчет называется итоговым отчетом. Итоговый отчет - отчет, в котором не представлена ни одна группа отчета типа фрагмент.
(2) По оператору GENERATE имя-данного-1 (ГЕНЕРИРОВАТЬ имя-данного-1) выполняется обработка фрагмента, которая включает определенную обработку, специфическую для группы отчета типа фрагмент, указанную оператором GENERATE (ГЕНЕРИРОВАТЬ). Обычно выполнение оператора GENERATE имя-данного-1 (ГЕНЕРИРОВАТЬ имя-данного-1) приводит к представлению указанной группы отчета типа фрагмент.
(3) При выполнении первого по времени оператора GENERATE (ГЕНЕРИРОВАТЬ) для данного отчета СУГО запоминает значения управляющих данных. Во время выполнения второго и последующих операторов для того же отчета и до распознавания прерывания управления СУГО использует этот набор управляющих данных для проверки наличия прерывания управления. Если встретилось прерывание управления, СУГО запоминает новую последовательность значений управляющих данных, которая с этого времени используется для определения прерывания управления, пока не встретится очередное прерывание управления.
(4) В процессе представления отчета, если СУГО должна осуществить переход на новую страницу для представления группы тела отчета, выполняются автоматические функции обработки групп отчета типа заголовок страницы и концовка страницы, если они определены (см. п.3.10 настоящей части).
(5) При выполнении первого по времени оператора GENERATE (ГЕНЕРИРОВАТЬ) для данного отчета СУГО обрабатывает названные ниже группы отчета в порядке их перечисления (если они определены в описании отчета), а также группы отчета типа заголовок страницы и концовка страницы, как это описано в общем правиле 4. Действия, выполняемые при обработке каждого типа группы отчета, объяснены в соответствующем параграфе (см. п.3.20 настоящей части).
а) Обрабатывается группа отчета типа заголовок отчета.
б) Обрабатывается группа отчета типа заголовок страницы.
в) Обрабатываются все группы отчета типа управляемый заголовок, начиная от старшего уровня иерархии управления к младшим уровням.
г) Если выполняется оператор GENERATE имя-данного-1 (ГЕНЕРИРОВАТЬ имя-данного-1), выполняется обработка указанной группы отчета типа фрагмент. Если выполняется оператор GENERATE имя-отчета-1 (ГЕНЕРИРОВАТЬ имя-отчета-1), то выполняются некоторые действия, сопровождающие обработку группы отчета типа фрагмент (см. п.3.20 настоящей части).
(6) В процессе выполнения последующих по времени операторов GENERATE (ГЕНЕРИРОВАТЬ) для данного отчета выполняется ряд описанных ниже действий в порядке следования их описания, а также в соответствии с общим правилом 4 обрабатываются группы типа заголовок страницы и концовка страницы. Действия, выполняемые при обработке каждого типа группы отчета объяснены в соответствующем параграфе (см. п.3.20 настоящей части).
а) Проверка на наличие прерывания управления. Правила определения равенства управляющих данных такие же, как и для условий отношения.
Если встретилось прерывание управления, то:
1) для процедур, определенных оператором USE (ИСПОЛЬЗОВАТЬ) и фраз SOURCE (ИСТОЧНИК), соответствующих группам отчета типа управляемая концовка, обеспечивается возможность доступа к значениям управляющих данных, вызвавшим данное прерывание управления (см. п.3.20 настоящей части);
2) обработка групп отчета типа управляемая концовка в порядке от младшего к старшим уровням иерархии управления. Обрабатываются только те группы отчета типа управляемая концовка, уровень иерархии которых не старше самого высокого уровня, на котором встретилось прерывание управления;
3) обработка групп отчета типа управляемый заголовок в порядке от старшего к младшим уровням иерархии. Обрабатываются только те из них, уровень иерархии управления которых не старше самого высокого уровня, на котором встретилось прерывание управления.
б) Если выполняется оператор GENERATE имя-данного-1 (ГЕНЕРИРОВАТЬ имя-данного-1), производится обработка указанной группы отчета типа фрагмент. Если выполняется оператор GENERATE имя-отчета-1 (ГЕНЕРИРОВАТЬ имя-отчета-1), то выполняются некоторые действия, входящие в обработку группы отчета типа фрагмент (см. п.3.20 настоящей части).
(7) Операторы GENERATE (ГЕНЕРИРОВАТЬ) для отчета могут быть выполнены только после выполнения оператора INITIATE (НАЧАТЬ) и до выполнения оператора TERMINATE (ЗАКОНЧИТЬ) для этого отчета.
4.4. Оператор INITIATE (НАЧАТЬ)
4.4.1. Назначение
Оператор INITIATE (НАЧАТЬ) побуждает систему управления генератором отчетов начать составление отчета.
4.4.2. Общий формат
INITIATE {имя-отчета-1}...
НАЧАТЬ {имя-отчета-1}...
4.4.3. Синтаксические правила
(1) Каждое имя-отчета-1 должно быть определено статьей описания отчета в секции отчетов раздела данных.
4.4.4. Общие правила
(1) Оператор INITIATE (НАЧАТЬ) выполняет следующие действия для каждого указанного отчета:
а) все счетчики сумм устанавливаются в нуль;
б) LINE-COUNTER (СЧЕТЧИК-СТРОК) устанавливается в нуль;
в) PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) устанавливается в единицу.
(2) Оператор INITIATE (НАЧАТЬ) не открывает файл, с которым связан отчет. Более того, для этого файла до выполнения оператора INITIATE (НАЧАТЬ) должен быть выполнен оператор OPEN (ОТКРЫТЬ) с вариантом OUTPUT (ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ).
(3) Следующий оператор INITIATE (НАЧАТЬ) для имени-отчета-1 не может быть выполнен до тех пор, пока не будет выполнен оператор TERMINATE (ЗАКОНЧИТЬ) для этого отчета, следующий за предыдущим оператором INITIATE (НАЧАТЬ).
(4) Если в операторе INITIATE (НАЧАТЬ) указано более одного имени-отчета, результат выполнения этого оператора такой, как если бы был записан отдельный оператор INITIATE (НАЧАТЬ) для каждого имени-отчета в том порядке, в каком имена-отчетов упоминались в операторе INITIATE (НАЧАТЬ).
4.5. Оператор OPEN (ОТКРЫТЬ)
4.5.1. Назначение
Оператор OPEN (ОТКРЫТЬ) инициирует обработку файлов отчетов.
4.5.2. Общий формат
4.5.3. Синтаксические правила
(1) Оператор OPEN (ОТКРЫТЬ) для файла отчетов может содержать только вариант OUTPUT (ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ).
(2) Допустимость вариантов в операторе OPEN (ОТКРЫТЬ) зависит от уровня модуля последовательного ввода-вывода, поддерживаемого реализацией (см. ч.7, п.4.3).
4.5.4. Общие правила
(1) Успешное выполнение оператора OPEN (ОТКРЫТЬ) делает файл доступным для обработки и переводит его в режим открытого файла. Успешное выполнение оператора OPEN (ОТКРЫТЬ) связывает файл с именем-файла посредством определителя файла.
Файл доступен, если он физически имеется в наличии и распознан системой управления вводом-выводом. Приведенная ниже таблица демонстрирует результаты открытия доступных и недоступных файлов.
Фраза | Файл доступен | Файл недоступен |
OUTPUT (ВЫХОДНОЙ) | Нормальное открытие; файл не содержит записей | Открытие приводит к созданию файла |
EXTEND (ДОПОЛНЯЕМЫЙ) | Нормальное открытие | Открытие неуспешное |
EXTEND (ДОПОЛНЯЕМЫЙ) (необязательный файл) | Нормальное открытие | Открытие приводит к созданию файла |
(2) Если файл не открыт, не может быть выполнен ни один оператор с явной или неявной ссылкой на файл, за исключением оператора OPEN (ОТКРЫТЬ).
(3) Оператор OPEN (ОТКРЫТЬ) для файла отчетов должен быть выполнен до выполнения оператора INITIATE (НАЧАТЬ) для любого отчета, содержащегося в этом файле.
(4) Файл отчетов может быть открыт с вариантом OUTPUT (ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ) в одной и той же единице исполнения.
После первого выполнения оператора OPEN (ОТКРЫТЬ) для файла отчетов перед каждым последующим выполнением оператора OPEN (ОТКРЫТЬ) для этого файла должен быть выполнен оператор CLOSE (ЗАКРЫТЬ) без вариантов REEL (КАТУШКУ), UNIT (ТОМ) или LOCK (С ЗАМКОМ) для этого файла.
(5) Если для файла определены записи меток, начальные метки обрабатываются следующим образом:
а) когда указана фраза OUTPUT (ВЫХОДНОЙ), выполнение оператора OPEN (ОТКРЫТЬ) приводит к записи меток в соответствии с процедурами, определенными реализацией для записи выходных меток.
Действия оператора OPEN (ОТКРЫТЬ) не определены, когда записи меток указаны, но в файле отсутствуют, или не указаны, но присутствуют.
(6) Если во время выполнения оператора OPEN (ОТКРЫТЬ) возникает условие противоречия свойств файла, выполнение оператора OPEN (ОТКРЫТЬ) неуспешно (см. ч.7, п.1.3.7).
(7) Вариант NO REWIND (БЕЗ ПЕРЕМОТКИ) должен использоваться только в следующих случаях:
а) для последовательных однокатушечных (однотомных) файлов (см. п.4.2 настоящей части);
б) для последовательных файлов, целиком содержащихся на одной катушке ленты в среде многофайловых лент (см. ч.7, п.2.11).
(8) Вариант NO REWIND (БЕЗ ПЕРЕМОТКИ) игнорируется, если он не применим к внешнему носителю, на котором располагается файл.
(9) Если внешний носитель для файла допускает перемотку, применяются следующие правила:
а) если ни один из вариантов EXTEND (ДОПОЛНЯЕМЫЙ) или NO REWIND (БЕЗ ПЕРЕМОТКИ) не указан, выполнение оператора OPEN (ОТКРЫТЬ) приводит к переустановке файла в начало;
б) если задана фраза NO REWIND (БЕЗ ПЕРЕМОТКИ), при выполнении оператора OPEN (ОТКРЫТЬ) переустановка файла не производится; файл уже должен быть установлен в начало до выполнения оператора OPEN (ОТКРЫТЬ).
(10) Если задан вариант EXTEND (ДОПОЛНЯЕМЫЙ), при выполнении оператора OPEN (ОТКРЫТЬ) файл устанавливается непосредственно за последней логической записью этого файла. Последней логической записью последовательного файла является последняя занесенная в файл запись.
(11) Если задан вариант EXTEND (ДОПОЛНЯЕМЫЙ) и фраза LABEL RECORDS (МЕТКИ) указывает, что записи меток присутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие действия:
а) начальные метки файла обрабатываются только для однокатушечных (однотомных) файлов;
б) начальные метки катушки (тома) обрабатываются на последней имеющейся катушке (томе), как если бы файл открывался с вариантом INPUT (ВХОДНОЙ);
в) имеющиеся конечные метки файла обрабатываются, как если бы файл был открыт с вариантом INPUT (ВХОДНОЙ). Эти метки затем удаляются;
г) затем обработка продолжается, как если бы файл был открыт как OUTPUT (ВЫХОДНОЙ).
(12) Интерпретация файла, содержащегося в среде многофайловых лент, логически эквивалентна интерпретации последовательного файла, содержащегося в среде однофайловых лент.
(13) Если совокупность файлов размещена на одной катушке ленты и на один из этих файлов имеется ссылка в операторе OPEN (ОТКРЫТЬ), то применяются следующие правила:
а) одновременно в открытом состоянии может находиться не более одного файла;
б) если один из файлов, соответствующих имени-файла, является субъектом оператора OPEN (ОТКРЫТЬ) с вариантом OUTPUT (ВЫХОДНОЙ), во время выполнения оператора OPEN (ОТКРЫТЬ) на соответствующей катушке должны уже существовать все файлы, номер позиций которых меньше, чем номер позиции данного файла. Кроме того, в это время на катушке не могут существовать файлы, номер позиции которых больше номера позиции данного файла;
в) каждый из файлов должен быть последовательным файлом.
(14) Для необязательного файла, являющегося недоступным, успешное выполнение оператора OPEN (ОТКРЫТЬ) с вариантом EXTEND (ДОПОЛНЯЕМЫЙ) создает файл. Это создание происходит так, как если бы в указанном порядке выполнялись следующие операторы:
OPEN OUTPUT имя-файла.
CLOSE имя-файла.
ОТКРЫТЬ ВЫХОДНОЙ имя-файла.
ЗАКРЫТЬ имя-файла.
За этими операторами следует выполнение оператора OPEN (ОТКРЫТЬ), указанного в исходной программе.
Успешное выполнение оператора OPEN (ОТКРЫТЬ) с вариантом OUTPUT (ВЫХОДНОЙ) создает файл. После успешного создания такой файл не содержит записей данных.
(15) После успешного выполнения оператора OPEN (ОТКРЫТЬ) указатель текущего тома устанавливается на:
а) катушку (том), содержащую последнюю логическую запись дополняемого файла;
б) новую катушку (том) для недоступного выходного или дополняемого файла.
(16) Выполнение оператора OPEN (ОТКРЫТЬ) приводит к обновлению значения состояния ввода-вывода, соответствующего имени-файла (см. ч.7, п.1.3.5).
(17) Если в операторе OPEN (ОТКРЫТЬ) указано более одного имени-файла, результат выполнения этого оператора OPEN (ОТКРЫТЬ) такой, как если бы отдельный оператор OPEN (ОТКРЫТЬ) был написан для каждого имени-файла в том порядке, как они указаны в операторе OPEN (ОТКРЫТЬ).
(18) Минимальный и максимальный размеры записей файла, устанавливаются во время создания файла и не могут изменяться в дальнейшем.
4.6. Оператор SUPPRESS (ПОДАВИТЬ)
4.6.1. Назначение
Оператор SUPPRESS побуждает систему управления генератором отчетов исключить представление группы отчета.
4.6.2. Общий формат
SUPPRESS PRINTING
ПОДАВИТЬ ПЕЧАТЬ
4.6.3. Синтаксические правила
(1) Оператор SUPPRESS (ПОДАВИТЬ) может указываться только в процедуре USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ).
4.6.4. Общие правила
(1) Оператор SUPPRESS (ПОДАВИТЬ) исключает представление только группы отчета, названной в процедуре USE (ИСПОЛЬЗОВАТЬ), в которой появляется оператор SUPPRESS (ПОДАВИТЬ).
(2) Оператор SUPPRESS (ПОДАВИТЬ) должен быть выполнен каждый раз, когда необходимо исключить представление определенной группы отчета.
(3) При выполнении оператора SUPPRESS (ПОДАВИТЬ) система управления генератором отчетов информируется о запрещении следующих функций группы отчета:
а) представление печатных строк группы отчета;
б) обработка всех фраз LINE (НОМЕР СТРОКИ) для группы отчета;
в) обработка фразы NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) для группы отчета;
г) корректировка регистра LINE-COUNTER (СЧЕТЧИК-СТРОК).
4.7. Оператор TERMINATE (ЗАКОНЧИТЬ)
4.7.1. Назначение
Оператор TERMINATE (ЗАКОНЧИТЬ) побуждает систему управления генератором отчетов завершить обработку указанных отчетов.
4.7.2. Общий формат
TERMINATE {имя-отчета-1}...
ЗАКОНЧИТЬ {имя-отчета-1} ...
4.7.3. Синтаксические правила
(1) Имя-отчета-1 должно быть определено статьей описания отчета в секции отчетов раздела данных.
4.7.4. Общие правила
(1) Оператор TERMINATE (ЗАКОНЧИТЬ) приводит к выработке всех групп отчета типа управляемая концовка, начиная от управляемой концовки, соответствующей младшему уровню иерархии управления. Затем вырабатывается группа типа концовка отчета. СУГО обеспечивает доступность предыдущего набора значений управляющих данных фразам SOURCE (ИСТОЧНИК) для управляемой концовки и концовки отчета и процедурам USE (ИСПОЛЬЗОВАТЬ), как если бы прерывание управления было распознано для управляющего имени-данного самого старшего уровня иерархии управления.
(2) Если для данного отчета между выполнением операторов INITIATE (НАЧАТЬ) и TERMINATE (ЗАКОНЧИТЬ) не был выполнен ни один оператор GENERATE (ГЕНЕРИРОВАТЬ), оператор TERMINATE (ЗАКОНЧИТЬ) не приводит к обработке никаких групп отчета и выполнению соответствующих действий СУГО.
(3) В процессе представления отчета, когда СУГО должна осуществить переход на новую страницу для представления группы тела отчета, она выполняет автоматические функции обработки групп отчета типа заголовок страницы и концовка страницы, если они определены (см. п.3.10 настоящей части).
(4) Оператор TERMINATE (ЗАКОНЧИТЬ) может быть выполнен для отчета, если только оператору TERMINATE (ЗАКОНЧИТЬ) предшествовал по времени оператор INITIATE (НАЧАТЬ) для этого отчета и никакой оператор TERMINATE (ЗАКОНЧИТЬ) еще не был выполнен для него.
(5) Если в операторе TERMINATE (ЗАКОНЧИТЬ) указано более одного имени-отчета, результат выполнения такого оператора TERMINATE (ЗАКОНЧИТЬ) такой же, как если бы отдельный оператор TERMINATE (ЗАКОНЧИТЬ) был записан для каждого имени-отчета в том же порядке, в каком имена-отчетов указаны в операторе TERMINATE (ЗАКОНЧИТЬ).
(6) Оператор TERMINATE (ЗАКОНЧИТЬ) не закрывает файл, с которым связан отчет; для этого файла должен быть выполнен оператор CLOSE (ЗАКРЫТЬ). Каждый отчет, для которого начата обработка, должен быть завершен до выполнения оператора CLOSE (ЗАКРЫТЬ) для соответствующего файла.
4.8. Оператор USE AFTER STANDARD EXCEPTION PROCEDURE (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ)
4.8.1. Назначение
Оператор USE AFTER STANDARD EXCEPTION PROCEDURE (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ) указывает процедуры для обработки ошибок ввода-вывода, являющиеся дополнением к стандартным процедурам, обеспечиваемым системой управления вводом-выводом.
4.8.2. Общий формат
4.8.3. Синтаксические правила
(1) Оператор USE (ИСПОЛЬЗОВАТЬ), если он имеется, должен непосредственно следовать за заголовком секции в декларативной части раздела процедур и должен быть один в предложении. Остальная часть декларативной секции должна состоять из нуля, одного или нескольких процедурных параграфов, определяющих процедуры, которые должны использоваться.
(2) Сам оператор USE (ИСПОЛЬЗОВАТЬ) никогда не выполняется; он только определяет условия, вызывающие выполнение указанных после него процедур.
(3) Появление имени-файла-1 в операторе USE (ИСПОЛЬЗОВАТЬ) не может требовать одновременного выполнения более чем одной процедуры USE (ИСПОЛЬЗОВАТЬ).
(4) Слова ERROR и EXCEPTION являются синонимами.
(5) Файлы, на которые имеются явные или неявные ссылки в операторе USE (ИСПОЛЬЗОВАТЬ), могут иметь различную организацию или доступ.
(6) Каждый из вариантов OUTPUT (ВЫХОДНЫХ) или EXTEND (ДОПОЛНЯЕМЫХ) может указываться только один раз в декларативной части раздела процедур.
4.8.4. Общие правила
(1) Декларативные процедуры могут быть включены в любую исходную Кобол-программу, независимо от того, содержит ли эта программа другую программу или сама содержится в другой программе. Декларатива вызывается тогда, когда во время выполнения программы выполняются условия, описанные в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе. Только одна декларатива внутри отдельно скомпилированной программы, содержащей оператор, который вызвал уточняющее условие, вызывается тогда, когда во время выполнения программы возникает какое-либо из условий, описанных в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе. Если не существует уточняющей декларативы в отдельно скомпилированной программе, то декларатива не выполняется.
(2) Внутри декларативной процедуры не должно быть обращений к каким-либо процедурам в недекларативной части раздела процедур.
(3) К именам процедур, связанным с оператором USE (ИСПОЛЬЗОВАТЬ), могут быть обращения в другой декларативной секции или в недекларативной процедуре только посредством оператора PERFORM (ВЫПОЛНИТЬ).
(4) Когда имя-файла-1 указано явно, то к имени-файла-1 не применяется никакой другой оператор USE (ИСПОЛЬЗОВАТЬ).
(5) Процедуры, связанные с оператором USE (ИСПОЛЬЗОВАТЬ), выполняются системой управления вводом-выводом после завершения стандартной программы обработки ошибки ввода-вывода при неуспешном выполнении операции ввода-вывода, за исключением того, что вариант AT END (В КОНЦЕ) имеет старшинство. При выполнении процедур соблюдаются следующие правила:
а) если указано имя-файла-1, то выполняется соответствующая процедура при возникновении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ);
б) если указано OUTPUT (ВЫХОДНЫХ) то соответствующая процедура выполняется при возникновении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ) для любого файла, открытого как OUTPUT (ВЫХОДНОЙ) или же находящегося в процессе открытия в режиме вывода, за исключением файлов, ссылка на которые посредством имени-файла-1 имеется в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
в) если указано EXTEND (ДОПОЛНЯЕМЫХ), то соответствующая процедура выполняется при возникновении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для любого файла, открытого как EXTEND (ДОПОЛНЯЕМЫЙ) или находящегося в процессе открытия в режиме дополнения, за исключением файлов, ссылки на которые посредством имени-файла-1 имеются в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие.
(6) После выполнения процедуры, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), управление передается вызывающей программе в системе управления вводом-выводом.
Если значение состояния ввода-вывода не указывает на критическую ошибку ввода-вывода, то система управления вводом-выводом возвращает управление оператору, следующему за оператором ввода-вывода. Если значение состояния ввода-вывода указывает на критическую ошибку, то действие определяется реализацией.
(7) Внутри процедуры, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), не должны выполняться никакие операторы, которые могут потребовать выполнение процедуры, связанной с другим оператором USE (ИСПОЛЬЗОВАТЬ), вызванной ранее и еще не вернувшей управление вызвавшей ее программе.
4.9. Оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ)
4.9.1. Назначение
Оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) указывает операторы раздела процедур, которые выполняются непосредственно перед представлением группы отчета, описанной в секции отчетов раздела процедур.
4.9.2. Общий формат
USE BEFORE REPORTING идентификатор-1
ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ идентификатор-1
4.9.3. Синтаксические правила
(1) Оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ), если он указан, должен непосредственно следовать за заголовком секции в декларативной части раздела процедур и должен быть единственным в предложении. Остальная часть секции должна состоять из нуля, одного или нескольких параграфов, определяющих подлежащие использованию процедуры.
(2) Идентификатор-1 должен относиться к группе отчета. Идентификатор-1 не должен появляться более чем в одном операторе USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ).
(3) Операторы GENERATE (ГЕНЕРИРОВАТЬ), INITIATE (НАЧАТЬ) или TERMINATE (ЗАКОНЧИТЬ) не должны появляться в процедуре USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ).
Оператор PERFORM (ВЫПОЛНИТЬ) в процедуре, относящейся к оператору USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ), не должен иметь в своей области действия операторы GENERATE (ГЕНЕРИРОВАТЬ), INITIATE (НАЧАТЬ) или TERMINATE (ЗАКОНЧИТЬ).
(4) Процедура, связанная с оператором USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ), не должна изменять значений ни одного из управляющих данных.
(5) Оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) сам не выполняется, он только определяет условия, которые вызывают выполнение связанной с ним процедуры.
4.9.4. Общие правила
(1) Декларативные процедуры могут быть включены в любую исходную Кобол-программу, независимо от того, содержит ли она другую программу или сама содержится в другой программе. Декларатива вызывается непосредственно перед представлением названной группы отчета во время выполнения программы. Группа отчета указывается идентификатором-1 в операторе USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ), предшествующем процедуре.
(2) Внутри декларативной процедуры не должно быть обращений к каким-либо недекларативным процедурам.
(3) К именам-процедур, связанным с оператором USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ), могут быть обращения в другой декларативной секции или в недекларативной процедуре только посредством оператора PERFORM (ВЫПОЛНИТЬ).
(4) В операторе USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) указанные процедуры выполняются системой управления генератором отчетов непосредственно перед представлением названной группы отчета (см. п.3.20 настоящей части).
(5) Внутри процедуры, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), не должны выполняться никакие операторы, которые могут потребовать выполнение процедуры, связанной с другим оператором USE (ИСПОЛЬЗОВАТЬ), вызванной ранее и еще не вернувшей управление вызвавшей ее программе.
Часть 14. МОДУЛЬ КОММУНИКАЦИЙ
1. ВВЕДЕНИЕ В МОДУЛЬ КОММУНИКАЦИЙ
1.1. Назначение
Модуль коммуникаций обеспечивает возможность получения, обработки и создания сообщений или их частей. Он позволяет с помощью системы управления сообщениями связываться с коммуникационными устройствами.
1.2. Характеристика уровней
Уровень 1 коммуникаций обеспечивает ограниченные возможности для статьи описания коммуникации. В разделе процедур уровень 1 обеспечивает ограниченные возможности операторов RECEIVE (ПОЛУЧИТЬ) и SEND (ПОСЛАТЬ) и полные возможности оператора ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ).
Уровень 2 коммуникаций обеспечивает полные возможности для статьи описания коммуникации. В разделе процедур уровень 2 обеспечивает полные возможности операторов ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИИ), DISABLE (ЗАПРЕТИТЬ), ENABLE (РАЗРЕШИТЬ), PURGE (ОЧИСТИТЬ), RECEIVE (ПОЛУЧИТЬ), SEND (ПОСЛАТЬ). |
2. РАЗДЕЛ ДАННЫХ В МОДУЛЕ КОММУНИКАЦИЙ
2.1. Секция коммуникаций
Секция коммуникаций находится в разделе данных исходной программы. Секция коммуникаций описывает элементы данных исходной программы, которые будут использованы для интерфейса между системой управления сообщениями и программой. Эта область интерфейса определяется статьей описания коммуникации. За статьей описания коммуникации может следовать одна или несколько статей описания записей или не следовать ни одной.
Общий формат секции коммуникаций показан ниже:
COMMUNICATION SECTION.
[статья-описания-коммуникации
[статья-описания-записи]:...]…
СЕКЦИЯ КОММУНИКАЦИЙ.
[статья-описания-коммуникации
[статья-описания-записи]...]...
2.1.1. Статья описания коммуникации
В программе на Коболе статья описания коммуникации представляет собой высший уровень организации в секции коммуникаций. За заголовком секции коммуникаций следует статья описания коммуникации, содержащая индикатор уровня CD (OК), имя-данного и последовательность независимых фраз. Статья заканчивается точкой.
Для статьи описания коммуникации для ввода фразы указывают очереди
Для статьи описания коммуникации для ввода-вывода фразы указывают дату и время сообщения, символический терминал, длину текста, ключи состояния и конца.
2.1.2. Структура описания записи
Область записи, связанная со статьей описания коммуникации, может быть неявно переопределена пользователем статьей описания записи, написанной непосредственно за статьей описания коммуникации.
Описание записи состоит из набора статей описания данных, которые описывают характеристики отдельной записи. Каждая статья описания данного состоит из номера уровня, имени данного или фразы FILLER (ЗАПОЛНИТЕЛЬ), и следующей за ними последовательности независимых фраз. Описание записи может иметь иерархическую структуру, поэтому используемые в статье фразы зависят от наличия подчиненных статей. Структура описания записи и допустимые элементы в статье описания записи приводятся в ч.4, пп.4.3.1.3 и 5.3. Употребление отдельных фраз в статье описания данного зависит от уровня модуля ядра, поддерживаемого реализацией.
2.2. Статья описания коммуникации
2.2.1. Назначение
Описание коммуникации определяет область связи между системой управления сообщениями и программой Кобола.
2.2.2. Общий формат
Формат 1
Формат 2
Формат 3
2.2.3. Синтаксические правила
Все форматы
(1) Статья CD (OК) может появиться только в секции коммуникаций.
Форматы 1 и 3
(2) В пределах одной программы фраза INITIAL (НАЧАЛЬНОГО) может быть указана только в одной статье описания коммуникации. Эта фраза не может использоваться в программе, для которой в заголовке раздела процедур указан вариант USING (ИСПОЛЬЗУЯ). |
(3)
(4) Если ни одна из фраз в формате не указана, за статьей описания коммуникации CD (OК) должна следовать статья уровня 01 описания данного. В любом случае за статьей CD (OК) может следовать статья уровня 01 описания данного.
Формат 1
(5) Статьи описания записей, следующие за CD (OК) для ввода, неявно переопределяют эту запись и должны описывать запись из 87 литер. Допускается неоднократное переопределение этой записи. Однако фразу VALUE (ЗНАЧЕНИЕ) может содержать только первое переопределение. Система управления сообщениями будет всегда обращаться к записи в соответствии с описаниями данных, определенными в общем правиле 2 (см. ч.6, п.5.15).
(6) Имя-данного-1 по имя-данного-11 не должны дублироваться в данной статье CD (OК). Любое из этих имен данных может быть заменено зарезервированным словом FILLER (ЗАПОЛНИТЕЛЬ).
Формат 2
(7) Необязательные фразы могут следовать в любом порядке.
(8) Если в статье описания коммуникации не задана ни одна из фраз, за статьей CD (OК) должна следовать статья описания данного уровня 01.
(9) Статьи описания записей, следующие за CD (OК) для вывода, неявно переопределяют эту запись. Допускается многократное переопределение этой записи. Однако фразу VALUE (ЗНАЧЕНИЕ) может содержать только первое переопределение. Система управления сообщениями обращается к записи в соответствии с описаниями данных, определенными в общих правилах (см. ч.6, п.5.15).
(10) Имя-данного-1, имя-данного-2, имя-данного-3, имя-данного-4, имя-данного-5 не должны дублироваться внутри CD (OК).
(12) Если задана фраза DESTINATION TABLE OCCURS (ТАБЛИЦА АДРЕСАТОВ ПОВТОРЯЕТСЯ), то к этим данным можно обращаться только используя индексирование. |
Формат 3
(14) Статьи описания записей, следующие за CD (OК) для ввода-вывода, неявно переопределяют эту запись и должны описывать запись из 33 литер стандартного формата данных. Допускается многократное переопределение этой записи, однако фразу VALUE (ЗНАЧЕНИЕ) может содержать только первое переопределение. Система управления сообщениями обращается к записи в соответствии с правилами, определенными в общих правилах (см. ч.6, п.5.15).
(15) Имя-данного-1, имя-данного-2, имя-данного-3, имя-данного-4, имя-данного-5 и имя-данного-6 не должны дублироваться в данной статье CD (OК). Любое из этих имен данных может быть заменено зарезервированным словом FILLER (ЗАПОЛНИТЕЛЬ).
2.2.4. Общие правила
Формат 1
(1) Информация CD (OК) для ввода служит для связи между системой управления сообщениями и программой, так как задает информацию о сообщении, которое будет обрабатываться. Эта информация не поступает с терминала как часть сообщения.
(2) Для каждой статьи CD (OК) для ввода выделяется область из 87 смежных литер в стандартном формате данных. Эта область записи определяется для системы управления сообщениями следующим образом:
а) фраза SYMBOLIC QUEUE (СИМВОЛИЧЕСКАЯ ОЧЕРЕДЬ) определяет имя-даниого-1 как имя элементарного буквенно-цифрового данного из 12 литер, занимающего в записи позиции 1-12;
б) фраза SYMBOLIC SUB-QUEUE-1 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-1) определяет имя-данного-2 как имя элементарного буквенно-цифрового данного из 12 литер, занимающего в записи позиции 13-24; в) фраза SYMBOLIC SUB-QUEUE-2 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-2) определяет имя-данного-3 как имя элементарного буквенно-цифрового данного из 12 литер, занимающего в записи позиции 25-36; г) фраза SYMBOLIC SUB-QUEUE-3 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-3) определяет имя-данного-4 как имя элементарного буквенно-цифрового данного из 12 литер, занимающего в записи позиции 37-48; |
д) фраза MESSAGE DATE (ДАТА СООБЩЕНИЯ) определяет имя-данного-5 как имя данного, неявно описанного как целое из 6 цифр без знака и занимающего в записи позиции 49-54;
ж) фраза MESSAGE TIME (ВРЕМЯ СООБЩЕНИЯ) определяет имя-данного-6 как имя данного, неявно описанного как целое из 8 цифр без знака и занимающего в записи позиции 55-62;
з) фраза SYMBOLIC SOURCE (СИМВОЛИЧЕСКИЙ ИСТОЧНИК) определяет имя-данного-7 как имя элементарного буквенно-цифрового данного из 12 литер, занимающего в записи позиции 63-74;
и) фраза TEXT LENGTH (ДЛИНА ТЕКСТА) определяет имя-данного-8 как имя данного, неявно описанного как целое из 4 цифр без знака и занимающего в записи позиции 75-78;
к) фраза END KEY (КЛЮЧ КОНЦА) определяет имя-данного-9 как имя элементарного буквенно-цифрового данного из одной литеры, занимающей в записи позицию 79;
л) фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) определяет имя-данного-10 как имя элементарного буквенно-цифрового данного из двух литер, занимающего в записи позиции 80-81;
м) фраза MESSAGE COUNT (ЧИСЛО СООБЩЕНИЙ) определяет имя-данного-11 как имя элементарного данного, неявно описанного как целое из 6 цифр без знака и занимающего в записи позиции 82-87.
Вместо указанных выше фраз могут быть использованы имена-данных, которые, взятые по порядку, соответствуют именам-данных, определенным этими фразами. |
В любом случае предполагается неявное описание записи, как это представлено ниже.
Неявное описание | Комментарий | |
01 | имя-данного-0. | |
02 имя-данного-1 PICTURE X (12). | SYMBOLIC QUEUE | |
02 имя-данного-2 PICTURE X (12). | SYMBOLIC SUB-QUEUE-1 | |
02 имя-данного-3 PICTURE X (12). | SYMBOLIC SUB-QUEUE-2 | |
02 имя-данного-4 PICTURE X (12). | SYMBOLIC SUB-QUEUE-3 | |
02 имя-данного-5 PICTURE 9 (6). | MESSAGE DATE | |
02 имя-данного-6 PICTURE 9 (8). | MESSAGE TIME | |
02 имя-данного-7 PICTURE X (12). | SYMBOLIC SOURCE | |
02 имя-данного-8 PICTURE 9 (4). | TEXT LENGTH | |
02 имя-данного-9 PICTURE X. | END KEY | |
02 имя-данного-10 PICTURE XX. | STATUS KEY | |
02 имя-данного-11 PICTURE 9 (6). | MESSAGE COUNT | |
|
| |
01 | имя-данного-0. | |
02 имя-данного-1 | ||
ШАБЛОН Х (12). | СИМВОЛИЧЕСКАЯ ОЧЕРЕДЬ | |
02 имя-данного-2 | ||
ШАБЛОН Х (12). | СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-1 | |
02 имя-данного-3 | ||
ШАБЛОН X (12). | СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-2 | |
02 имя-данного-4 | ||
ШАБЛОН Х (12). | СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-3 | |
02 имя-данного-5 | ||
ШАБЛОН 9 (6). | ДАТА СООБЩЕНИЯ | |
Неявное описание | Комментарий | |
02 имя-данного-6 | ||
ШАБЛОН 9 (8). | ВРЕМЯ СООБЩЕНИЯ | |
02 имя-данного-7 | ||
ШАБЛОН Х (12). | СИМВОЛИЧЕСКИЙ ИСТОЧНИК | |
02 имя-данного-8 | ||
ШАБЛОН 9 (4). | ДЛИНА ТЕКСТА | |
02 имя-данного-9 | ||
ШАБЛОН X. | КЛЮЧ КОНЦА | |
02 имя-данного-10 | ||
ШАБЛОН XX. | КЛЮЧ СОСТОЯНИЯ | |
02 имя-данного-11 | ||
ШАБЛОН 9 (6). | ЧИСЛО СООБЩЕНИЙ |
После выполнения оператора RECEIVE (ПОЛУЧИТЬ) значения имени-данного-1 по имя-данного-4 будут представлять символические имена всех уровней структуры очереди.
(6) Если программа обработки сообщения вызывается системой управления сообщениями, символические имена уровней структуры очереди, связанной с этой обработкой, помещаются в имя-данного-1 по имя-данного-4, определенные в статье CD (ОК) с фразой INITIAL (НАЧАЛЬНОГО). Во всех остальных случаях запуска программ значения имени-данного-1 по имя-данного-4, связанные с такой статьей, представляются пробелами. Засылка пробелов или символических имен заканчивается до выполнения первого оператора раздела процедур. Выполнение последующего оператора RECEIVE (ПОЛУЧИТЬ) для тех же значений имени-данного-1 по имя-данного-4 приводит к получению того же сообщения, которое вызвало запуск программы. Только в этот момент будет обновлена оставшаяся часть области связи. (7) Если система управления сообщениями пытается вызвать программу, не содержащую фразу INITIAL (НАЧАЛЬНОГО) в статье CD (ОК), результат не определен. |
(8) При выполнении оператора RECEIVE (ПОЛУЧИТЬ) система управления сообщениями помещает дату, когда было распознано, что сообщение завершено, в форме 'ГГММДД' (год, месяц, день) в имя-данного-5. Значение имени-данного-5 обновляется системой управления сообщениями только во время выполнения оператора RECEIVE (ПОЛУЧИТЬ).
(9) При выполнении оператора RECEIVE (ПОЛУЧИТЬ) система управления сообщениями помещает значение момента времени завершения сообщения в форме 'ЧЧММССХХ' (часы, минуты, секунды, сотые доли секунды) в имя-данного-6. Значение имени-данного-6 обновляется системой управления сообщениями только во время выполнения оператора RECEIVE (ПОЛУЧИТЬ).
(10) При выполнении оператора RECEIVE (ПОЛУЧИТЬ) система управления сообщениями помещает в имя-данного-7 символическое имя терминала, который является источником передаваемого сообщения.
Это символическое имя должно удовлетворять правилам образования системных имен.
Однако, если символическое имя терминала неизвестно системе управления сообщениями, имя-данного-7 будет содержать пробелы.
(11) Значением имени-данного-8 система управления сообщениями указывает число позиций литер, заполненных в результате выполнения оператора RECEIVE (ПОЛУЧИТЬ).
(12) Значение имени-данного-9 устанавливается системой управления сообщениями во время выполнения оператора RECEIVE (ПОЛУЧИТЬ) по следующим правилам:
а) для оператора RECEIVE MESSAGE (ПОЛУЧИТЬ СООБЩЕНИЕ):
1) если обнаружен конец группы, то значение имени-данного-9 устанавливается равным 3;
2) если обнаружен конец сообщения, то значение имени-данного-9 устанавливается равным 2;
3) если передается часть сообщения, то значение имени-данного-9 устанавливается равным нулю; б) для оператора RECEIVE SEGMENT (ПОЛУЧИТЬ СЕГМЕНТ): 1) Если обнаружен конец группы, то значение имени-данного-9 устанавливается равным 3; 2) если обнаружен конец сообщения, то значение имени-данного-9 устанавливается равным 2; 3) если обнаружен конец сегмента, то значение имени-данного-9 устанавливается равным 1; 4) если передается только часть сообщения, то значение имени-данного-9 устанавливается равным 0; |
в) если одновременно выполняются несколько перечисленных условий, то значение имени-данного-9 определяется первым выполненным условием в перечисленном выше порядке.
Соответствие значения имени-данного-1 состоянию выполнения отражено в табл.1.
Таблица 1
RE- | SEND (ПОС- | SEND (ПОС- | PURGE | ACCEPT MES- | ENABLE INPUT | ENABLE INPUT/I-O TERMINAL | ENABLE OUTPUT | DISABLE INPUT | DISABLE INPUT/I-О TERMINAL | DISABLE OUTPUT | Зна- | Комментарий |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
x | x | x | x | x | х | x | x | x | x | x | 00 | Ошибки не обнаружено. Выполнение оператора завершено |
x | x | 10 | Один или несколько адресатов запрещены. Выполнение оператора завершено (см. п.2.2.6) | |||||||||
x | 10 | Адресат запрещен. Никакие действия не предпринимаются | ||||||||||
x | x | x | x | x | x | 15 | Символический источник, одна или несколько очередей и адресатов запрещены/разрешены | |||||
x | x | x | x | x | 20 | Один или несколько адресатов неизвестны. Для известных адресатов действие завершается (см. п.2.2.6) | ||||||
x | x | x | x | 20 | Одна или несколько очередей или подочередей неизвестны. Никакие действия не предпринимаются | |||||||
x | x | x | 21 | Символический источник неизвестен. Никакие действия не предпринимаются | ||||||||
x | x | x | x | 30 | Значение данного DESTINATION COUNT (ЧИСЛО АДРЕСАТОВ) недопустимо. Никакие действия не предпринимаются | |||||||
x | x | x | x | x | x | 40 | Пароль недействителен. Никакие действия не предпринимаются | |||||
x | x | 50 | Длина текста больше чем длина посылаемого поля, представленного идентификатором-1 | |||||||||
x | x | 60 | Часть сообщения с нулевым счетчиком литер или не определен идентификатор-1. Никакие действия не предпринимаются | |||||||||
x | 65 | Превышены возможности выходной очереди (см. п.2.2.6) | ||||||||||
x | 70 | Один или несколько адресатов не имеют порций, связанных с ними. Выполнение оператора завершается для других адресатов | ||||||||||
x | x | x | x | x | x | 80 | Произошла комбинация по крайней мере хотя бы двух ключей состояния со значениями 10, 15 и 20 (см. п.2.2.6) | |||||
9х | Состояния, определяемые реализацией |
(14) Значение имени-данного-11 указывает число сообщений, имеющихся в очереди
Формат 2
(15) Информация, определенная статьей CD (OК) для вывода, не посылается на терминал. Она служит для связи между системой управления сообщениями и программой и задает информацию о сообщении, которое обрабатывается.
а) фраза DESTINATION COUNT (ЧИСЛО АДРЕСАТОВ) определяет имя-данного-1 как имя данного, неявно описанного как целое без знака и занимающего в записи позиции 1-4;
б) фраза TEXT LENGTH (ДЛИНА ТЕКСТА) определяет имя-данного-2 как имя данного, неявно описанного как целое из 4 цифр без знака и занимающего в записи позиции 5-8;
в) фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ), определяет имя-данного-3 как элементарное буквенно-цифровое данное из 2 литер, занимающее в записи позиции 9, 10;
г) позиции литер 11-23 и каждый набор по 13 литер за ними образуют таблицу элементов со следующим описанием:
1) фраза ERROR KEY (КЛЮЧ ОШИБКИ) определяет имя-данного-4 как имя элементарного буквенно-цифрового данного из одной литеры;
2) фраза SYMBOLIC DESTINATION (СИМВОЛИЧЕСКИЙ АДРЕСАТ) определяет имя-данного-5 как имя элементарного буквенно-цифрового данного из 12 литер.
Использование всех этих фраз определяет запись, неявное описание которой приведено ниже.
03 имя-да
(19) Во время выполнения оператора SEND (ПОСЛАТЬ) система управления сообщениями рассматривает значение имени-данного-2 как число крайних левых позиций литер в поле, определяемом идентификатором в операторе SEND (ПОСЛАТЬ), из которого надо передавать данные (п.3.6 настоящей части).
(20)
Соответствие между значением данного имя-данного-4 и ключом ошибки определено в табл.2.
Формат 3
(23) Информация, определенная статьей CD (OК) для ввода-вывода служит для связи между системой управления сообщениями и программой и задает информацию о сообщении, которое обрабатывается. Эта информация не передается с терминала как часть сообщения.
(24) Для каждого CD (OК) для ввода-вывода выделяется непрерывная область записи из 33 литер. Эта область записи определяется для системы управления сообщениями следующим образом:
а) фраза MESSAGE DATE (ДАТА СООБЩЕНИЯ) определяет имя-данного-1 как имя данного, неявно описанного как целое из 6 цифр без знака, занимающего в записи позиции 1-6;
б) фраза MESSAGE TIME (ВРЕМЯ СООБЩЕНИЯ) определяет имя-данного-2 как имя данного, неявно описанного как целое из 8 цифр без знака, занимающего в записи позиции литер 7-14;
в) фраза SYMBOLIC TERMINAL (СИМВОЛИЧЕСКИЙ ТЕРМИНАЛ) определяет имя-данного-3 как имя элементарного буквенно-цифрового данного, состоящего из 12 литер и занимающего в записи позиции литер 15-26;
г) фраза TEXT LENGTH (ДЛИНА ТЕКСТА) определяет имя-данного-4 как имя элементарного данного, неявно описанного как целое из 4 цифр без знака, занимающего в записи позиции литер 27-30;
д) фраза END KEY (КЛЮЧ КОНЦА) определяет имя-данного-5 как имя элементарного буквенно-цифрового данного из 1 литеры и занимающего в записи позицию 31;
е) фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) определяет имя-данного-6 как имя элементарного буквенно-цифрового данного из 2 литер и занимающего в записи позиции литер 32, 33.
Вместо указанных выше фраз могут быть использованы имена-данных, которые, взятые по порядку, соответствуют именам-данных, определенным этими фразами. |
В любом случае предполагается неявное описание записи, которое представлено ниже.
Неявное описание | Комментарий | |
01 имя-данного-0. | ||
02 имя-данного-1 PICTURE 9 (6). | MESSAGE DATE | |
02 имя-данного-2 PICTURE 9 (8). | MESSAGE TIME | |
02 имя-данного-3 PICTURE X (12). | SYMBOLIC TERMINAL | |
02 имя-данного-4 PICTURE 9 (4). | TEXT LENGTH | |
02 имя-данного-5 PICTURE X. | END KEY | |
02 имя-данного-6 PICTURE XX. | STATUS KEY | |
01 имя-данного-0. | ||
02 имя-данного-1 ШАБЛОН 9 (6). | ДАТА СООБЩЕНИЯ | |
02 имя-данного-2 ШАБЛОН 9 (8). | ВРЕМЯ СООБЩЕНИЯ | |
02 имя-данного-3 ШАБЛОН X (12). | СИМВОЛИЧЕСКИЙ ТЕРМИНАЛ | |
02 имя-данного-4 ШАБЛОН 9 (4). | ДЛИНА ТЕКСТА | |
02 имя-данного-5 ШАБЛОН X. | КЛЮЧ КОНЦА | |
02 имя-данного-6 ШАБЛОН XX. | КЛЮЧ СОСТОЯНИЯ |
(25) Если программа обработки сообщений вызывается системой управления сообщениями, то выполнение первого оператора RECEIVE (ПОЛУЧИТЬ) для статьи CD (OК) для ввода-вывода с фразой INITIAL (НАЧАЛЬНОГО) приводит к получению того же сообщения, которое вызвало запуск программы. |
(26) Имя-данного-1 имеет формат 'ГГММДД' (год, месяц, день). Его значение представляет дату, когда было распознано завершение сообщения системой управления сообщениями.
Значение имени-данного-1 обновляется системой управления сообщениями только во время выполнения оператора RECEIVE (ПОЛУЧИТЬ).
(27) Имя-данного-2 имеет формат 'ЧЧММССДД' (часы, минуты, секунды, сотые доли секунды) и его значение представляет время, когда системой управления сообщениями было распознано завершение сообщения.
Значение имени-данного-2 обновляется системой управления сообщениями только во время выполнения оператора RECEIVE (ПОЛУЧИТЬ).
(28) Если программа обработки сообщений вызывается системой обработки сообщений, то символическое имя терминала, являющегося источником сообщения, активирующего эту программу, помещается в имя-данного-3 статьи CD (OК) для ввода-вывода с фразой INITIAL (НАЧАЛЬНОГО), если она применяется. Это символическое имя должно удовлетворять правилам образования системных имен. Во всех других случаях значением имени-данного-3 статьи CD (OК) для ввода-вывода с фразой INITIAL (НАЧАЛЬНОГО) будут пробелы. Засылка символического имени или пробелов заканчивается до выполнения первого оператора раздела процедур. |
(29) Если система управления сообщениями пытается вызвать программу, не содержащую фразу INITIAL (НАЧАЛЬНОГО) в статье CD (OК), результат не определен.
(30) Если фраза INITIAL (НАЧАЛЬНОГО) используется в статье CD (OК) для ввода-вывода и программа вызывается программой управления сообщениями, то значение имени-данного-3 не должно изменяться программой. Если это значение изменить, то выполнение любого оператора, использующего имя-коммуникации-1, будет неуспешным и значением имени-данного-6 будет код, означающий неизвестный источник или адресат (см. табл.1).
После выполнения первого оператора, использующего имя-коммуникации-1, значение данного имя-данного-3 не должно изменяться программой. Если это значение изменить, то выполнение любого оператора, использующего имя-коммуникации-1, будет неуспешным, и значением имени-данного-6 будет код, означающий неизвестный источник или адресат (см. табл.1).
(32) В качестве значения имени-данного-4 система управления сообщениями указывает число позиций литер, заполненных в результате выполнения оператора RECEIVE (ПОЛУЧИТЬ).
Во время выполнения оператора SEND (ПОСЛАТЬ) система управления сообщениями рассматривает значение имени-данного-4 как число крайних левых позиций в поле, используемом в операторе SEND (ПОСЛАТЬ), из которого надо передавать данные (п.3.6 настоящей части).
(33) Значение имени-данного-5 устанавливается системой управления сообщениями во время выполнения оператора RECEIVE (ПОЛУЧИТЬ) согласно следующим правилам.
а) Для оператора RECEIVE MESSAGE (ПОЛУЧИТЬ СООБЩЕНИЕ):
1) если обнаружен конец группы, то значение имени-данного-5 устанавливается равным 3;
2) если обнаружен конец сообщения, то значение имени-данного-5 устанавливается равным 2;
3) если передается часть сообщения, то значение имени-данного-5 устанавливается равным 0.
б) Для оператора RECEIVE SEGMENT (ПОЛУЧИТЬ СЕГМЕНТ): 1) если обнаружен конец группы, то значение имени-данного-5 устанавливается равным 3; 2) если обнаружен конец сообщения, то значение имени-данного-5 устанавливается равным 2; 3) если обнаружен конец сегмента, то значение имени-данного-5 устанавливается равным 1; 4) если передается только часть сообщения, то значение имени-данного-5 устанавливается равным 0. |
в) Если одновременно удовлетворяются несколько из перечисленных выше условий, то значение имени-данного-5 определяется первым выполненным условием в порядке перечисления.
Соответствие значения имени-данного-6 состоянию отражено в табл.1.
2.2.5. Условия ключа состояния коммуникации
2.2.6. Значение ключа ошибки
В табл.2 показаны возможные значения имени-данного-4 формата 2 при выполнении перечисленных операторов. Символ х означает, что соответствующее значение ключа ошибки имеет смысл для данного оператора.
Таблица 2
SEND (ПОСЛАТЬ) | PURGE | ENABLE OUTPUT | DISABLE OUTPUT | Значение ключа ошибки | Комментарий |
X | X | X | X | 0 | Ошибка не обнаружена |
X | X | X | X | 1 | Символический адресат не известен |
X | X | 2 | Символический адресат запрещен | ||
X | 4 | Ни одна из частей сообщения не имеет символического адресата | |||
X | X | 5 | Символический адресат уже был разрешен/запрещен | ||
X | 6 | Возможности выходной очереди превышены | |||
7-9 | Зарезервированы для дальнейшего использования | ||||
A-Z | Условия, определяемые реализацией |
Символ |
3. РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ КОММУНИКАЦИЙ
3.1. Оператор ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ)
3.3.1*. Назначение
_________________
* Нумерация соответствует оригиналу. - .
Оператор ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ) делает доступным число полных сообщений в очереди.
3.1.2. Общий формат
ACCEPT имя-коммуникации-1 MESSAGE COUNT
ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ имя-коммуникации-1
3.1.3. Синтаксические правила
(1) Имя-коммуникации-1 должно относиться к описанию коммуникации для ввода.
3.1.4. Общие правила
(2) Во время выполнения оператора ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ) область, определенная статьей описания коммуникации, должна содержать, по крайней мере, имя символической очереди, которую надо проверить. Проверка условия приводит к обновлению областей, определенных именем-данного-10 во фразе STATUS KEY (КЛЮЧ СОСТОЯНИЯ) и именем-данного-11 во фразе MESSAGE COUNT (ЧИСЛО СООБЩЕНИЙ), связанных с данной статьей описания коммуникаций (см. п.2.1 настоящей части).
3.2. Оператор DISABLE (ЗАПРЕТИТЬ) 3.2.1. Назначение Оператор DISABLE (ЗАПРЕТИТЬ) извещает систему управления сообщениями о том, что она должна запретить передачу между указанными выходными очередями и адресатами или указанными источниками и входными очередями или между программой и указанным источником или адресатом для ввода-вывода. Фраза WITH KEY (КЛЮЧ) рассматривается в настоящем стандарте как устаревшая и будет удалена из следующей редакции стандарта. 3.2.2. Общий формат |
3.2.3. Синтаксические правила (1) Имя-коммуникации-1 должно относиться к описанию коммуникации для ввода, если в операторе указана фраз INPUT (ВВОД). |
(2) Имя-коммуникации-1 должно относиться к описанию коммуникации для ввода-вывода, если указана фраза I-O TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА). |
(3) Имя-коммуникации должно относиться к описанию коммуникации для вывода, если в операторе указана фраза OUTPUT (ВЫВОД). (4) Литерал-1 и значение идентификатора-1 должны быть определены как буквенно-цифровые. |
3.2.4. Общие правила (1) Оператор DISABLE (ЗАПРЕТИТЬ) обеспечивает логическое рассоединение системы управления сообщениями с заданными источниками или адресатами. Если логическое рассоединение уже имеет место или если оно должно обеспечиваться какими-либо средствами, внешними к программе, оператор DISABLE (ЗАПРЕТИТЬ) в этой программе не требуется. Если выполняется оператор DISABLE (ЗАПРЕТИТЬ), в котором указан уже рассоединенный источник или адресат, за исключением того, что значение ключа состояния указывает на это условие, никаких действий не производится. Оператор DISABLE (ЗАПРЕТИТЬ) не влияет на логический путь передачи данных между программой на Коболе и системой управления сообщениями. (2) Система управления сообщениями обеспечит, чтобы выполнение оператора DISABLE (ЗАПРЕТИТЬ) приводило к логическому рассоединению в кратчайшее время, когда источник или адресат становится неактивным. Выполнение оператора DISABLE (ЗАПРЕТИТЬ) никогда не прерывает передачу сообщения на терминал или с него. |
(3) Фраза INPUT (ВВОД) без фразы TERMINAL (С ТЕРМИНАЛА) указывает на прекращение логической связи между очередями и подочередями, указанными содержимым от имени-данного-1 во фразе SYMBOLIC QUEUE (СИМВОЛИЧЕСКАЯ ОЧЕРЕДЬ) по имя-данного-4 во фразе SYMBOLIC SUB-QUEUE-3 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-3) области, на которую ссылается имя-коммуникации-1, и всеми источниками, связанными с ними. (4) Фраза INPUT (ВВОД) с необязательной фразой TERMINAL (С ТЕРМИНАЛА) указывает на прекращение логической связи между источником, определенным значением имени-данного-7 во фразе SYMBOLIC SOURCE (СИМВОЛИЧЕСКИЙ ИСТОЧНИК), и всеми очередями и подочередями. (5) Фраза I-O TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА) указывает на прекращение логической связи между источником (определенным значением имени-данного-3 во фразе SYMBOLIC TERMINAL (СИМВОЛИЧЕСКИЙ ТЕРМИНАЛ), и программой. (6) Фраза OUTPUT (ВЫВОД) указывает на прекращение логической связи для всех адресатов, определенных значениями каждого из экземпляров имени-данного-5, количество которых определяется значением имени-данного-1 из области, на которую ссылается имя-коммуникации-1. (7) Литерал-1 или значение идентификатора-1 будет сравниваться с паролем, заданным в системе. Оператор DISABLE (ЗАПРЕТИТЬ) будет выполняться, если только литерал-1 или значение идентификатора-1 совпадает с системным паролем. В противном случае лишь обновляется значение данного STATUS KEY (КЛЮЧ СОСТОЯНИЯ) в области, на которую ссылается имя-коммуникации-1. Система управления сообщениями должна уметь обрабатывать пароль длиной от 1 до 10 литер включительно. |
3.3. Оператор ENABLE (РАЗРЕШИТЬ) 3.3.1. Назначение Оператор ENABLE (РАЗРЕШИТЬ) сообщает системе управления сообщениями о разрешении обмена данными между очередями для вывода и адресатами или заданными источниками и очередями для ввода или между программой и одним заданным источником или адресатом для ввода-вывода. Фраза WITH KEY (КЛЮЧ) рассматривается в настоящем стандарте как устаревший элемент и будет удалена в следующей редакции. 3.3.2. Общий формат |
3.3.3. Синтаксические правила (1) Имя-коммуникации-1 должно относиться к описанию коммуникации для ввода, если задана фраза INPUT (ВВОД). (2) Имя-коммуникации-1 должно относиться к описанию коммуникации для ввода-вывода, если задана фраза I-O TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА). (3) Имя-коммуникации-1 должно относиться к описанию коммуникации для вывода, если задана фраза OUTPUT (ВЫВОД). (4) Литерал-1 и значение идентификатора-1 должны быть определены как буквенно-цифровые. 3.3.4. Общие правила (1) Оператор ENABLE (РАЗРЕШИТЬ) обеспечивает логическое соединение системы управления сообщениями с заданными источниками или адресатами. Если это логическое соединение уже имеет место или обеспечивается какими-либо другими средствами, внешними по отношению к этой программе, то оператор ENABLE (РАЗРЕШИТЬ) в ней не требуется. Никаких действий не производится, если оператор ENABLE (РАЗРЕШИТЬ) выполняется с указанным источником или адресатом, которые уже соединены, за исключением того, что значение ключа состояния указывает на это условие. Оператор ENABLE (РАЗРЕШИТЬ) не влияет на логический путь передачи данных между программой на Коболе и системой управления сообщениями. (2) Фраза INPUT (ВВОД) без необязательной фразы TERMINAL (С ТЕРМИНАЛА) указывает на активизацию логического пути между очередью и подочередями, определенными значением от имени-данного-1 во фразе SYMBOLIC QUEUE (СИМВОЛИЧЕСКАЯ ОЧЕРЕДЬ) по имя-данного-4 во фразе SYMBOLIC SUB-QUEUE-3 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-3), из области, на которую ссылается имя-коммуникации-1, и всеми источниками, связанными с ними. |
(3) Фраза INPUT (ВВОД) с необязательной фразой TERMINAL (С ТЕРМИНАЛА) указывает на активизацию логического пути между источником, определенным значением имени-данного-7, во фразе SYMBOLIC SOURCE (СИМВОЛИЧЕСКИЙ ИСТОЧНИК), и всеми ему соответствующими очередями и подочередями. |
(4) Фраза I-O TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА) указывает на активизацию логического пути между источником, определенным значением имени-данного-3 во фразе SYMBOLIC TERMINAL (СИМВОЛИЧЕСКИЙ ТЕРМИНАЛ), и программой. |
(5) Фраза OUTPUT (ВЫВОД) указывает на активизацию логических путей для всех адресатов, определенных значениями каждого из экземпляров имени-данного-5, количество которых определяется значением имени-данного-1 из области, на которую ссылается имя-коммуникации-1. |
(6) Литерал-1 или значение идентификатора-1 сравнивается с паролем, заданным в системе. Если |
литерал-1 или значение идентификатора-1 совпадает с этим паролем, оператор ENABLE (РАЗРЕШИТЬ) будет выполнен. В противном случае лишь обновляется значение данного STATUS KEY (КЛЮЧ СОСТОЯНИЯ), связанного с именем-коммуникации-1. Система управления сообщениями должна уметь обрабатывать пароль длиной от 1 до 10 литер включительно. |
3.4. Оператор PURGE (ОЧИСТИТЬ) 3.4.1. Назначение Оператор PURGE (ОЧИСТИТЬ) исключает из системы управления сообщениями незаконченное сообщение, переданное одним или более оператором SEND (ПОСЛАТЬ). 3.4.2. Общий формат PURGE имя-коммуникации-1 ОЧИСТИТЬ имя-коммуникации-1 3.4.3. Синтаксические правила (1) Имя-коммуникации-1 должно относиться к статье CD (OК) для вывода или к статье CD (OК) для ввода-вывода. 3.4.4. Общие правила (1) Выполнение оператора PURGE (ОЧИСТИТЬ) указывает системе управления сообщениями уничтожить все неоконченные сообщения, ожидающие передачи адресатам, определенным в статье CD (OК) для имени-коммуникации-1. 2) Сообщение, связанное с EMI (ИКЩ) или EGI (ИКГ), не затрагивается при выполнении оператора PURGE (ОЧИСТИТЬ). (3) Значение ключа состояния и ключа ошибки, если они используются, из области, на которую ссылается имя-коммуникации-1, обновляются системой управления сообщениями (см. п.2.2 настоящей части). |
3.5. Оператор RECEIVE (ПОЛУЧИТЬ)
3.5.1. Назначение
Оператор RECEIVE (ПОЛУЧИТЬ) делает доступным сообщение
3.5.2. Общий формат
3.5.3. Синтаксические правила
(1) Имя-коммуникации-1 должно относиться к описанию коммуникации для ввода
3.5.4. Общие правила
(2) Если имя-коммуникации-1 относится к описанию коммуникации для ввода-вывода, то значение данного, указанного именем-данного-3 во фразе SYMBOLIC TERMINAL (СИМВОЛИЧЕСКИЙ ТЕРМИНАЛ), связанного с именем-коммуникации-1, определяет источник сообщения.
(3) Сообщение
(4) Если при выполнении оператора RECEIVE (ПОЛУЧИТЬ) система управления сообщениями делает данные доступными в области, определенной идентификатором-1, фраза NO DATA (НЕТ ДАННЫХ) игнорируется и управление передается в конец оператора RECEIVE (ПОЛУЧИТЬ) или повелительному-оператору-2, если задана фраза WITH DATA (ЕСТЬ ДАННЫЕ). Если управление передается повелительному-оператору-2, то выполнение продолжается согласно правилам, определенным для каждого оператора повелительного-оператора-2. Если это оператор ветвления процедур или условный оператор который явно передает управление, то передача управления осуществляется согласно правилам для используемых операторов; в противном случае после выполнения повелительного-оператора-2 управление передается в конец оператора RECEIVE (ПОЛУЧИТЬ).
(5) Если при выполнении оператора RECEIVE (ПОЛУЧИТЬ) система управления сообщениями не делает данные доступными в области, определенной идентификатором-1, выполняется одно из трех перечисленных ниже действий. Условия, при которых данные недоступны, определяются реализацией.
а) Если в операторе RECEIVE (ПОЛУЧИТЬ) задана фраза NO DATA (НЕТ ДАННЫХ), то выполнение оператора RECEIVE (ПОЛУЧИТЬ) заканчивается указанием на завершение действия и управление передается повелительному-оператору-1. Выполнение продолжается согласно правилам, определенным для каждого оператора, указанного в повелительном-операторе-1.
Если это оператор ветвления процедур или условный оператор, который явно передает управление, то передача управления осуществляется согласно правилам для используемых операторов; в противном случае после выполнения повелительного-оператора-1 управление передается в конец оператора RECEIVE (ПОЛУЧИТЬ), а фраза WITH DATA (ЕСТЬ ДАННЫЕ), если указана, игнорируется.
б) Если фраза NO DATA (НЕТ ДАННЫХ) не задана в операторе RECEIVE (ПОЛУЧИТЬ), то выполнение объектной программы приостанавливается до тех пор, пока данные не будут доступны в области, определенной идентификатором-1.
в) Если одна или несколько очередей
(6) При каждом выполнении оператора RECEIVE (ПОЛУЧИТЬ) данные, определенные именем-коммуникации-1, обновляются системой управления сообщениями (см. п.2.2 настоящей части).
а) если размер сообщения совпадает с размером области, определенной идентификатором-1, сообщение запоминается в этой области;
б) если размер сообщения меньше размера области, то оно выравнивается к самой левой позиции литеры области идентификатора-1; позиции, не занятые сообщением, не изменяются;
г) если с текстом передаваемого оператором RECEIVE (ПОЛУЧИТЬ) сообщения связан индикатор конца группы, то предполагается существование индикатора конца сообщения.
(9) Если используется фраза SEGMENT (СЕГМЕНТ), применяются следующие правила передачи данных: а) если размер сегмента совпадает с размером области, определенной идентификатором-1, сегмент запоминается в этой области; б) если размер сегмента меньше размера области, то сегмент выравнивается к самой левой позиции литеры области идентификатора-1; позиции, не занятые сообщением, не изменяются; в) если размер сегмента больше размера области идентификатора-1, сегмент заполняет область слева направо, начиная с самой левой литеры сегмента. Остаток сегмента может быть передан в область, определенную идентификатором-1, следующими операторами RECEIVE (ПОЛУЧИТЬ), относящимися к той же очереди, подочереди и так далее. Остаток сегмента рассматривается как новый сегмент и к нему применимы приведенные выше правила 9а, 9б, 9в; г) если с текстом, доступным по оператору RECEIVE (ПОЛУЧИТЬ), связан индикатор конца группы или индикатор конца сообщения, предполагается существование индикатора конца сегмента. (10) Когда выполнение оператора RECEIVE (ПОЛУЧИТЬ) делает доступным часть сообщения, только последующее выполнение операторов RECEIVE (ПОЛУЧИТЬ) в этом же исполняемом модуле может привести к передаче оставшейся части сообщения. |
(11) Фраза END-RECEIVE (КОНЕЦ-ПОЛУЧИТЬ) ограничивает область действия оператора RECEIVE (ПОЛУЧИТЬ) (см. 3.4, п.6.4.3).
3.6. Оператор SEND (ПОСЛАТЬ)
3.6.1. Назначение
3.6.2. Общий формат
Формат 1 SEND имя-коммуникации-1 FROM идентификатор-1 ПОСЛАТЬ имя-коммуникации-1 ИЗ ПОЛЯ идентификатор-1 |
Формат 2
3.6.3. Синтаксические правила
(1) Имя-коммуникации-1 должно относиться к описанию коммуникации для вывода или для ввода-вывода.
(2) Идентификатор-2 должен представлять целое из одной цифры без знака. |
(3) Идентификатор-3 должен представлять целое.
(4) Если используется мнемоническое-имя-1, оно идентифицирует конкретные свойства, определяемые реализацией. Мнемоническое-имя-1 определяется в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования. |
(5) Целое-1 или значение идентификатора-3 может быть нулем.
3.6.4. Общие правила
Все форматы
(1) Когда приемное коммуникационное устройство ориентировано на фиксированный размер строки (например дисплей, перфокарточное устройство вывода, печатающее устройство), выполняется следующее:
а) каждое сообщение
б) если размер сообщения
в) избыточные литеры сообщения
(2) Когда приемное коммуникационное устройство ориентировано на обработку сообщений переменной длины (как, например, перфолентрчное устройство вывода, другая ЭВМ), каждое сообщение
(3) Во время выполнения оператора SEND (ПОСЛАТЬ) система управления сообщениями интерпретирует значение длины текста в области, к которой относится имя-коммуникации-1, как заданное пользователем число позиций литер, начиная от крайней слева, в области идентификатора-1, из которой будут передаваться данные.
Если значение длины текста равно нулю, то никакие литеры идентификатора-1 не передаются.
Если значение длины текста лежит вне диапазона чисел от нуля до размера идентификатора-1 включительно, то значение ключа состояния указывает на ошибку и данные не передаются.
(4) Во время выполнения оператора SEND (ПОСЛАТЬ) значение ключа состояния, связанного с именем-коммуникации-1, обновляется системой управления сообщениями.
(5) При наличии в значении идентификатора-1 специальных символов управления результат выполнения оператора не определен.
Однако система управления сообщениями передает сообщение коммуникационному устройству только тогда, когда все сообщение будет полностью у нее. (7) Во время выполнения единицы исполнения размещение части сообщения, незаконченного по EMI (ИКЩ), EGI (ИКГ) или не уничтоженного оператором PURGE (ОЧИСТИТЬ), не определено. Для системы управления сообщениями такое сообщение логически не существует и, следовательно, не может быть послано адресату. (8) Если выполнение оператора SEND (ПОСЛАТЬ) передает системе управления сообщениями часть сообщения, то только последующее выполнение оператора SEND (ПОСЛАТЬ) в той же единице исполнения может привести к передаче оставшейся части сообщения. |
Формат 2
(9) Значение идентификатора-2 указывает, что значение идентификатора-1, если он определен, имеет связанный с ним индикатор конца сегмента, индикатор конца сообщения, индикатор конца группы или не имеет индикатора (что означает передачу части сегмента или сообщения). Если идентификатор-1 не определен, то только индикатор пересылается системе управления сообщениями. | ||
Значение идентификатора-2 | Тип индикатора, связанный со значением идентификатора-1 | Комментарий |
0 | Нет индикатора | Часть сообщения или сегмента |
1 | ESI (ИКС) (индикатор конца сегмента) | Конец текущего сегмента |
2 | EMI (ИКЩ) (индикатор конца сообщения) | Конец текущего сообщения |
3 | EGI (ИКГ) (индикатор конца группы) | Конец текущей группы сообщений |
Любое другое значение идентификатора-2 будет трактоваться как нуль. В этом случае значение ключа состояния, связанного с именем-коммуникации-1, указывает на ошибку и данные не передаются. |
(10) Фраза WITH EGI (С ИКГ) указывает системе управления сообщениями, что закончена группа сообщений.
Фраза WITH EMI (С ИКЩ) указывает системе управления сообщениями, что сообщение закончено.
Система управления сообщениями распознает эти индикаторы и устанавливает необходимые средства управления группой, сообщением
(12) Фраза ADVANCING (ПРОДВИЖЕНИЯ) обеспечивает вертикальное позиционирование каждого сообщения
(13) Если задан идентификатор-2 и его значение равно нулю, то система управления сообщениями игнорирует фразу ADVANCING (ПРОДВИЖЕНИЯ) и фразу REPLACING (ЗАМЕНЯЯ), если они указаны. |
(14) На устройстве, где возможно вертикальное позиционирование, а фраза ADVANCING (ПРОДВИЖЕНИЯ) не задана, peaлизация должна обеспечивать автоматическое продвижение, как если бы пользователь указал AFTER ADVANCING 1 LINE (ПОСЛЕ ПРОДВИЖЕНИЯ 1 СТРОК).
(15) Если явно или неявно указана фраза ADVANCING (ПРОДВИЖЕНИЯ) и вертикальное позиционирование возможно, применяются следующие правила:
а) если задан идентификатор-3 или целое, то литеры, передаваемые на коммуникационное устройство, будут перемещены вертикально вниз на количество строк, равное значению идентификатора-3 или целого;
б) если значение данного, на которое ссылается идентификатор-3, отрицательно, результат не определен;
в) если задано мнемоническое-имя-1, литеры, передаваемые на устройство, будут размещены по правилам, определенным реализацией для этого устройства; |
г) если используется фраза BEFORE (ДО), сообщение
д) если используется фраза AFTER (ПОСЛЕ), сообщение
ж) если задана фраза PAGE (СТРАНИЦЫ), то литеры, передаваемые на коммуникационное устройство, будут переданы на устройство до или после (в зависимости от используемого варианта) того, как устройство переведено на следующую страницу.
Если фраза PAGE (СТРАНИЦЫ) задана, но понятие страницы не имеет смысла для данного устройства, то продвижение должно быть обеспечено реализацией как если бы пользователь указал фразу BEFORE (ДО) или AFTER ADVANCING 1 LINE (ПОСЛЕ ПРОДВИЖЕНИЯ 1 СТРОК) (в зависимости от используемого варианта).
(16) Если принимающее коммуникационное устройство является устройством отображения символов, на котором возможно на одной и той же позиции представлять одну или более литер и, если устройство позволяет выбрать: либо последовательность литер накладывается на литеру, уже выведенную на дисплей, либо литера замещает другую литеру, предварительно выведенную на строку дисплея, то:
Часть 15. МОДУЛЬ ОТЛАДКИ
1. ВВЕДЕНИЕ В МОДУЛЬ ОТЛАДКИ
1.1. Назначение
Модуль отладки предоставляет средства для описания пользователем своего алгоритма отладки, включающего условия, по которым можно следить за данными или процедурами во время выполнения объектной программы.
Выбор объектов, подлежащих слежению, и соответствующей выдаваемой информации является обязанностью пользователей. Средства отладки в Коболе обеспечивают удобный доступ к соответствующей информации.
Модуль отладки является устаревшим элементом в настоящем стандарте и будет удален в следующей редакции стандарта.
1.2. Характеристика уровней
Уровень 1 отладки предоставляет основные средства отладки, включающие выборочное слежение за процедурами.
Уровень 2 отладки предоставляет полные средства отладки, имеющиеся в Коболе. |
1.3. Понятия языка
1.3.1. Возможности отладки
Модуль отладки в языке Кобол поддерживает следующие возможности:
а) переключатель времени компиляции - фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ);
б) переключатель, действующий во время исполнения;
в) оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ);
г) специальный регистр DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ).
1.3.2. Специальный регистр DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ)
Зарезервированное слово DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) является именем специального регистра, содержащего отладочную информацию и автоматически порождаемого реализацией. Для каждой программы порождается единственный регистр DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ). DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) имеет подчиненные данные, имена которых также являются зарезервированными словами.
1.3.3. Переключатель времени компиляции
Переключатель времени компиляции управляет компиляцией отладочных строк; он устанавливается фразой WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ), которая должна быть указана в параграфе SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА). Если эта фраза в программе указана, все отладочные строки компилируются как указано в этом разделе документа. Если эта фраза в программе не указана, все отладочные строки и секции рассматриваются при компиляции как строки комментариев.
1.3.4. Переключатель, действующий во время исполнения
Переключатель, действующий во время исполнения, динамически активизирует отладочные коды, встроенные компилятором. К этому переключателю нельзя обращаться в Кобол-программе, он управляется вне среды Кобола. Если он "включен", разрешаются все указанные в исходной программе отладочные действия. Если этот переключатель "выключен", действия, описанные в п.3.2 настоящей части, подавляются; при этом нет необходимости перекомпиляции исходной программы. Если в исходной программе фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) не указана, то переключатель, действующий во время исполнения, не оказывает влияния на выполнение объектной программы.
2. РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ ОТЛАДКИ
2.1. Фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ)
2.1.1. Назначение
Фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) указывает, что все отладочные секции должны компилироваться. Если эта фраза не указана, все отладочные секции компилируются так, как если бы они были строками комментариев.
2.1.2. Общий формат
SOURCE-COMPUTER. [имя-машины [WITH DEBUGGING MODE] .]
ИСХОДНАЯ-МАШИНА. [имя-машины [В РЕЖИМЕ ОТЛАДКИ].]
2.1.3. Общие правила
(1) Если в параграфе SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) секции конфигурации программы указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ), компилируются все операторы USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ).
(2) Если в секции конфигурации программы в параграфе SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) не указана, все операторы USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) и все соответствующие отладочные секции рассматриваются при компиляции как строки комментариев.
3. РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ ОТЛАДКИ
3.1. Общее описание
Если оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТБ ДЛЯ ОТЛАДКИ) из модуля отладки задается в исходной Кобол-программе, раздел процедур содержит декларативные процедуры. Ниже показан общий формат раздела процедур при задании оператора USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ).
3.2. Оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ)
3.2.1. Назначение
В операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) пользователь указывает данные, за которыми необходимо следить посредством соответствующей отладочной секции.
3.2.2. Общий формат
3.2.3. Синтаксические правила
(1) Если отладочные секции указаны, то они должны следовать друг за другом непосредственно за заголовком DECLARATIVES (ДЕКЛАРАТИВЫ).
(2) В отладочной секции в операторах, отличных от оператора USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ), нельзя обращаться к процедурам, содержащимся в недекларативной части раздела процедур.
(3) Операторы, появляющиеся вне отладочных секций, не должны ссылаться на имена-процедур, определенные в отладочных секциях.
(4) Операторы, появляющиеся в одной из отладочных секций, могут ссылаться на имена-процедур, определенные в другой отладочной секции, только посредством оператора PERFORM (ВЫПОЛНИТЬ).
Исключение составляет только оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ).
(5) Имена-процедур, определенные в отладочных секциях, не должны появляться в операторах USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ).
(6) Каждый из
(7) Фраза ALL PROCEDURES (ПРИ ВСЕХ ПРОЦЕДУРАХ) может появляться только один раз в программе.
(8) Если указана фраза ALL PROCEDURES (ПРИ ВСЕХ ПРОЦЕДУРАХ), то ни в каком другом операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) не должны указываться имена-процедур.
(9) Идентификатор-1 не должен представлять данные, определенные в секции отчетов, за исключением счетчиков сумм. (10) Если статья описания данного, представленного идентификатором-1, содержит фразу OCCURS (ПОВТОРЯЕТСЯ) или подчинена статье с фразой OCCURS (ПОВТОРЯЕТСЯ), то идентификатор-1 должен указываться без обычного необходимого индексирования. |
(11) Ссылки на специальный регистр DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) допускаются только в пределах отладочных секций.
(12) Идентификатор-1 не должен быть модификацией ссылки. |
3.2.4. Общие правила
(1) Операторы, встречающиеся в секции отладки, не вызывают автоматического выполнения секции отладки.
(2) Если в операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) задано имя-файла-1, соответствующая секция отладки выполняется: а) после выполнения операторов OPEN (ОТКРЫТЬ) или CLOSE (ЗАКРЫТЬ), ссылающихся на имя-файла-1; б) после выполнения оператора READ (ЧИТАТЬ) (после других указанных процедур USE (ИСПОЛЬЗОВАТЬ)), не вызвавшего выполнения соответствующего повелительного оператора, указанного фразами AT END (В КОНЦЕ) или INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА); в) после выполнения операторов DELETE (УДАЛИТЬ) или START (ПОДВЕСТИ), ссылающихся на имя-файла-1. |
(3) Если в операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) указано имя-процедуры-1, соответствующая отладочная секция выполняется:
а) непосредственно перед каждым выполнением названной процедуры;
б) непосредственно после выполнения оператора ALTER (ИЗМЕНИТЬ), ссылающегося на имя-процедуры-1.
(4) Фраза ALL PROCEDURES (ПРИ ВСЕХ ПРОЦЕДУРАХ) вызывает выполнение действий, указанных в общем правиле 3 для всех имен-процедур программы, кроме процедур, определенных в отладочных секциях.
(5) Если указана фраза ALL REFERENCES OF идентификатор-1 (ПРИ ВСЕХ ССЫЛКАХ НА идентификатор-1), соответствующая отладочная секция выполняется для каждого оператора, явно ссылающегося на идентификатор-1 в каждом из следующих случаев: а) в случае операторов WRITE (ПИСАТЬ) или REWRITE (ОБНОВИТЬ) выполнение отладочной секции происходит до выполнения операторов WRITE (ПИСАТЬ) или REWRITE (ОБНОВИТЬ), но после выполнения неявных перемещений, вызванных наличием в указанных операторах фразы FROM (ИЗ ПОЛЯ); |
б) в случае оператора GO TO (ПЕРЕЙТИ) с фразой DEPENDING ON (В ЗАВИСИМОСТИ ОТ) соответствующая отладочная секция выполняется непосредственно перед передачей управления и до выполнения отладочной секции, связанной с именем-процедуры, которой передается управление; |
в) в случае оператора PERFORM (ВЫПОЛНИТЬ), ссылающегося на идентификатор-1 посредством фраз VARYING (МЕНЯЯ), AFTER (ЗАТЕМ) или UNTIL (ДО) - непосредственно после присвоения начального значения, изменения или вычисления значения данного, представленного идентификатором-1; г) для всех других операторов Кобола - непосредственно после выполнения оператора. Если ссылка на идентификатор-1 производится во фразе, которая не выполняется, соответствующая отладочная секция также не выполняется, (6) Если указан идентификатор-1 без фразы ALL REFERENCES OF (ПРИ ВСЕХ ССЫЛКАХ НА), соответствующая секция отладки выполняется в следующих случаях: a) в случае операторов WRITE (ПИСАТЬ) или REWRITE (ОБНОВИТЬ) соответствующая отладочная секция выполняется непосредственно перед выполнением этих операторов и после неявных перемещений, указанных фразой FROM (ИЗ ПОЛЯ); |
б) в случае оператора PERFORM (ВЫПОЛНИТЬ), ссылающегося на идентификатор-1 посредством фраз VARYING (МЕНЯЯ), AFTER (ЗАТЕМ), UNTIL (ДО), непосредственно после присвоения начального значения, модификации и вычисления значения данного, представленного идентификатором-1; |
в) для всех других операторов Кобола, явно ссылающихся на идентификатор-1, непосредственно после выполнения оператора, приводящего к изменению значения данного, представленного идентификатором-1. Если ссылка на идентификатор-1 производится во фразе, которая не выполняется, соответствующая отладочная секция не выполняется. |
(7) Независимо от количества ссылок на некоторый идентификатор в пределах одного оператора, соответствующая отладочная секция выполняется для одного выполнения оператора не, более одного раза. Исключение составляет оператор PERFORM (ВЫПОЛНИТЬ), вызывающий итеративное выполнение процедуры, для которого соответствующая отладочная секция может выполняться один раз для каждой итерации. Каждое отдельное вхождение повелительного глагола в повелительном операторе рассматривается с точки зрения отладочных действий как отдельный оператор.
(8) Если в операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) указано имя-коммуникации-1, соответствующая отладочная секция выполняется: а) после выполнения операторов ENABLE (РАЗРЕШИТЬ), DISABLE (ЗАПРЕТИТЬ) и SEND (ПОСЛАТЬ), ссылающихся на имя-коммуникации-1; б) после выполнения ссылающегося на имя-коммуникации-1 оператора RECEIVE (ПОЛУЧИТЬ), не вызывающего выполнение повелительного оператора, указанного во фразе NO DATA (НЕТ ДАННЫХ); в) после выполнения ссылающегося на имя-коммуникации-1 оператора ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ). |
(9) Ссылка на
(10) С каждым выполнением отладочных секций связывается специальный регистр DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ), в котором представляется информация об условиях, вызвавших данное выполнение отладочной секции.
DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) имеет следующее неявное описание:
01 | DEBUG-ITEM. | |
02 | DEBUG-LINE PICTURE IS X (6). | |
02 | FILLER PICTURE IS X VALUE IS SPACE. | |
02 | DEBUG-NAME PICTURE IS X (30). | |
02 | FILLER PICTURE IS X VALUE IS SPACE. | |
02 | DEBUG-SUB-1 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER. | |
02 | FILLER PICTURE IS X VALUE IS SPACE. | |
02 | DEBUG-SUB-2 PICTURE IS S9999 SIGH IS LEADING SEPARATE CHARACTER. | |
02 | FILLER PICTURE IS X VALUE IS SPACE. | |
2 | DEBUG-SUB-3 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER. | |
02 | FILLER PICTURE IS X VALUE IS SPACE. | |
02 | DEBUG-CONTENTS PICTURE IS X (n). | |
01 ДАННЫЕ-ОТЛАДКИ. | ||
02 | СТРОКА-ОТЛАДКИ ШАБЛОН Х (6). | |
02 | ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ. | |
02 | ИМЯ-ОТЛАДКИ ШАБЛОН Х (30). | |
02 | ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ. | |
02 | ИНДЕКС-ОТЛАДКИ-1 ШАБЛОН З9999 ЗНАК ПЕРВЫЙ | |
ОТДЕЛЬНО. | ||
02 | ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ. | |
02 | ИНДЕКС-ОТЛАДКИ-2 ШАБЛОН З9999 ЗНАК ПЕРВЫЙ | |
ОТДЕЛЬНО. | ||
02 | ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ. | |
02 | ИНДЕКС-ОТЛАДКИ-3 ШАБЛОН З9999. ЗНАК ПЕРВЫЙ | |
ОТДЕЛЬНО. | ||
02 | ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ | |
02 | ЗНАЧЕНИЕ-ОТЛАДКИ ШАБЛОН Х (n): |
(11) Перед каждым выполнением отладочной секции значения данных, соотнесенных DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ), заполняются пробелами. Затем значения подчиненных ему данных обновляются в соответствии с нижеприведенными общими правилами, непосредственно перед передачей управления этой отладочной секции. Значения данных, не указанных в нижеследующих общих правилах, представляются пробелами.
Обновление выполняется в соответствии с правилами для оператора MOVE (ПОМЕСТИТЬ), за единственным исключением, состоящим в том, что перемещение в DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) неявно рассматривается как элементарное перемещение буквенно-цифрового в буквенно-цифровое без преобразования данных из одной формы внутреннего представления в другую.
(12) DEBUG-LINE (СТРОКА-ОТЛАДКИ) является определенным реализацией средством идентификации исходного оператора.
(13) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит первые 30 литер имени, вызвавшего выполнение отладочной секции.
Все уточнители имени отделяются в значении данного DEBUG-NAME (ИМЯ-ОТЛАДКИ) словом IN или OF (ИЗ).
Индексы при их наличии не включаются в это значение.
(14) Если ссылка на данное, вызвавшее выполнение отладочной секции, индексирована, то в DEBUG-SUB-1 (ИНДЕКС-ОТЛАДКИ-1), DEBUG-SUB-2 (ИНДЕКС-ОТЛАДКИ-2), DEBUG-SUB-3 (ИНДЕКС-ОТЛАДКИ-3) соответственно помещаются номера вхождений каждого из необходимых уровней индексирования. |
(15) Размер данного DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) должен допускать представление необходимых значений, определяемых последующими общими правилами.
(16) Если отладочная секция вызывается вследствие первого выполнения первой процедуры программы, не принадлежащей к декларативной части, то выполняются следующие условия:
а) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует первый оператор этой процедуры;
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя этой процедуры;
в) DEBUG-CONTENTS (ЗНАЧЕНИЕ ОТЛАДКИ) содержит значение
(17) Если выполнение отладочной секции вызвано ссылкой на имя-процедуры-1 в операторе ALTER (ИЗМЕНИТЬ), то имеет место следующее:
а) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует этот оператор ALTER (ИЗМЕНИТЬ);
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
в) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит имя процедуры, указанное фразой PROCEED TO (ДЛЯ ПЕРЕХОДА К) оператора ALTER (ИЗМЕНИТЬ).
(18) Если выполнение отладочной секции вызвано передачей управления при выполнении оператора GO TO (ПЕРЕЙТИ), то имеет место следующее:
a) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует указанный оператор GO ТО (ПЕРЕЙТИ), который передает управление имени-процедуры-2;
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1.
(19) Если выполнение отладочной секции вызвано ссылкой на имя-процедуры-1, указанной во фразах INPUT (ПРОЦЕДУРА ВВОДА) или OUTPUT (ПРОЦЕДУРА ВЫВОДА) оператора SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ), то имеет место следующее:
а) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует оператор SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ), ссылающийся на имя-процедуры-1;
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
в) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит:
1) в случае фразы INPUT (ПРОЦЕДУРА ВВОДА) оператора SORT (СОРТИРОВАТЬ) -
2) в случае фразы OUTPUT (ПРОЦЕДУРА ВЫВОДА) оператора SORT (СОРТИРОВАТЬ) -
3) в случае фразы OUTPUT (ПРОЦЕДУРА ВЫВОДА) оператора MERGE (СЛИТЬ) -
(20) Если выполнение отладочной секции вызвано передачей управления имени-процедуры-1 при выполнении оператора PERFORM (ВЫПОЛНИТЬ), то имеет место следующее:
a) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует этот оператор;
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
в) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит
(21) Если имя-процедуры-1 относится к процедуре, выполнение которой управляется оператором USE (ИСПОЛЬЗОВАТЬ), и наступили условия ее выполнения, то имеет место следующее:
а) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует оператор, выполнение которого повлекло выполнение имени-процедуры-1;
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
в) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит значение
(22) Если неявная передача управления из предыдущего последовательного параграфа к имени-процедуры-1 вызывает выполнение отладочной секции, имеет место следующее:
а) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует предыдущий оператор;
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
в) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит
(23) Если выполнение отладочной секции вызвано ссылкой на имя-файла-1 или имя-коммуникации-1, то имеет место следующее: а) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует исходный оператор, ссылающийся на имя-файла-1 или имя-коммуникации-1; б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-файла-1 или имя-коммуникации-1; в) для оператора READ (ЧИТАТЬ) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит прочитанную запись; г) для остальных операторов, ссылающихся на имя-файла-1, DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит пробелы; д) для любого оператора, ссылающегося на имя-коммуникации-1, DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит значение связанной с ним области. (24) Если выполнение отладочной секции вызвано ссылкой на идентификатор-1, то имеет место следующее: а) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует оператор, ссылающийся на идентификатор-1; б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит идентификатор-1; в) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит значение, представленное идентификатором-1 в момент передачи управления отладочной секции (см. общие правила 5 и 6). |
Часть 16. МОДУЛЬ СЕГМЕНТАЦИИ
1. ВВЕДЕНИЕ В МОДУЛЬ СЕГМЕНТАЦИИ
1.1. Назначение
Модуль сегментации предоставляет средства, которые позволяют пользователю взаимодействовать с компилятором для задания требуемых перекрытий в объектной программе.
Модуль сегментации рассматривается в настоящем стандарте Кобола как устаревший элемент и будет устранен из последующих редакций.
1.2. Характеристика уровней
Уровень 1 сегментации обеспечивает средства для определения фиксированных и независимых сегментов (п.1.4.1 настоящей части). Все секции, имеющие одинаковый номер сегмента, должны быть смежными в исходной программе.
Все сегменты, специфицированные как фиксированные, должны быть смежными в исходной программе.
Уровень 2 сегментации допускает смешивание секций с различными номерами сегментов и разрешает фиксированной части исходной программы содержать сегменты, которые могут быть перекрыты (п.1.4.1 настоящей части). |
1.3. Область действия
Модуль сегментации в Коболе касается только сегментации процедур. Следовательно, при определении требований к сегментации объектной программы рассматриваются только раздел процедур и раздел оборудования исходной программы.
1.4. Организация
1.4.1. Сегменты программы
Раздел процедур исходной программы, хотя это и необязательно, обычно записывается как группа последовательных секций, каждая из которых составлена из ряда операций, предназначенных в целом для выполнения некоторой конкретной функции. Однако, когда применяется сегментация, раздел процедур должен быть разделен на секции. Кроме того, каждая секция должна быть отнесена либо к фиксированной части, либо к одному из независимых сегментов объектной программы. Сегментация не освобождает от необходимости уточнения имен процедур.
1.4.2. Фиксированная часть программы
Фиксированная часть определяется как часть объектной программы, которая логически рассматривается, как если бы она полностью и постоянно находилась в памяти. Эта часть программы составляется из
1.4.3. Независимые сегменты
(1) когда рассматриваемому сегменту управление передается в результате неявной передачи управления из сегмента с номером сегмента, отличным от рассматриваемого;
(2) когда рассматриваемому сегменту передается управление в результате неявной передачи управления между операторами SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ) в сегменте с номером сегмента, отличным от рассматриваемого, и процедурой ввода или вывода в рассматриваемом независимом сегменте;
(3) когда рассматриваемому сегменту управление передается явно из сегмента с номером сегмента, отличным от рассматриваемого, за исключением передачи управления от оператора EXIT (ВЫЙТИ).
При последующих передачах управления независимому сегменту он находится в своем последнем использованном состоянии при следующих условиях:
(1) когда рассматриваемому сегменту управление передается неявно из сегмента с номером сегмента, отличным от рассматриваемого, за исключением, отмеченным выше в (1) и (2);
(2) когда управление рассматриваемому сегменту передается явно в результате выполнения оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) (см. ч.4 п.4.4.2).
1.5. Классификация сегментации
Сегментируемые секции классифицируются системой номеров сегментов (п.3.2 настоящей части) и следующими правилами.
(2) Частота использования. Обычно чаще используемым секциям присваиваются меньшие номера сегментов, реже - большие номера сегментов.
(3) Отношения с другими секциями. Секциям, которые часто обращаются друг к другу, следует присваивать один и тот же номер сегмента.
1.6. Управление сегментацией
Логическая последовательность программы совпадает с физической, за исключением специальных передач управления. Если для управления переходами от сегмента к сегменту (в соответствии с правилами п.3.2 настоящей части) требуется переупорядочение объектной программы, то реализация должна обеспечивать передачи управления так, чтобы осуществить логический поток, определенный в исходной программе. Реализация должна обеспечивать также все необходимые передачи управления для обрабатываемого сегмента при любом его использовании. Управление может быть передано внутри исходной программы любому параграфу в секции; таким образом, необязательно передавать управление в начало секции.
2. РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ СЕГМЕНТАЦИИ 2.1. Секция конфигурации Информация, связанная с секцией конфигурации, помещена в ч.6. 2.2. Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) 2.2.1. Назначение Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) обеспечивает средства для описания машины, на которой должна выполняться программа. 2.2.2. Общий формат |
2.2.3. Синтаксическое правило (1) Имя-машины - это системное имя. 2.2.4. Общие правила (1) Все фразы параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) применяются к программе, в которой они явно или неявно заданы, и к любой программе, содержащейся в этой программе. (2) Общие правила для имени-машины, фраз MEMORY SIZE (РАЗМЕР ПАМЯТИ) и PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ) приводятся в ч.6. (3) Фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) описывается в п.2.3 настоящей части. 2.3. Фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) 2.3.1. Назначение В идеальном случае все программные сегменты, имеющие номера-сегментов от 0 до 49, специфицируются как постоянные сегменты. Однако, когда доступная память недостаточна для того, чтобы разместить все постоянные сегменты плюс максимальный перекрываемый сегмент, становится необходимым сократить число постоянных сегментов. Фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) дает пользователю средство, которым он может уменьшить число постоянных сегментов в своей программе с сохранением логических свойств сегментов фиксированной части (номера-сегментов от 0 до 49). |
2.3.2. Общий формат SEGMENT-LIMIT IS номер-сегмента ГРАНИЦА СЕГМЕНТОВ номер-сегмента 2.3.3. Синтаксическое правило Номер-сегмента должен быть целым, принимающим значения от 0 до 49. 2.3.4. Общие правила (1) Если задана фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ), то в качестве постоянных сегментов объектной программы рассматриваются только сегменты, имеющие номера от 0 до (но не включая) номера, специфицированного фразой SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ). (2) Сегменты, имеющие номера от номера, специфицированного фразой SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ), до 49, рассматриваются как перекрываемые фиксированные сегменты. (3). Если фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) опущена, все сегменты с номерами-сегментов от 0 до 49 будут рассматриваться как постоянные сегменты объектной программы. |
3. РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ СЕГМЕНТАЦИИ
3.1. Общее описание
При использовании модуля сегментации в исходной Кобол-программе раздел процедур содержит секции с номерами сегментов.
Ниже приводится общий формат раздела процедур, в котором задаются секции и номера сегментов.
3.2. Номера сегментов
3.2.1. Назначение
Классификация секций выполняется с помощью системы номеров сегментов. Номер сегмента включается в заголовок секции.
3.2.2. Общий формат
имя-секции SECTION [номер-сегмента]
СЕКЦИЯ имя-секции [номер-сегмента].
3.2.3. Синтаксические правила
(1) Номер-сегмента - целое, принимающее значения от 0 до 99.
(2) Если номер-сегмента в заголовке секции опущен, то по умолчанию он предполагается равным 0.
(3) Секции декларатив должны иметь номера-сегментов, меньшие 50.
3.2.4. Общие правила
(1) Все секции, имеющие один и тот же номер-сегмента, составляют единый программный сегмент. В уровне 1 все секции, имеющие один и тот же номер-сегмента, должны быть смежными.
В уровне 2 смежность секций, имеющих в исходной программе одинаковые номера-сегментов, необязательна. |
(2) Сегменты с номерами-сегментов от 0 до 49 принадлежат фиксированной части программы. На уровне 1 все секции с номерами-сегментов от 0 до 49 должны быть в исходной программе смежны.
(3) Сегменты с номерами-сегментов от 50 до 99 - независимые сегменты.
3.3. Ограничения на программный поток
При использовании сегментации на операторы ALTER (ИЗМЕНИТЬ), PERFORM (ВЫПОЛНИТЬ), MERGE (СЛИТЬ) и SORT (СОРТИРОВАТЬ) накладываются следующие ограничения.
3.3.1. Оператор ALTER (ИЗМЕНИТЬ)
Оператор GO TO (ПЕРЕЙТИ) в секции с номером сегмента, большим или равным 50, не должен быть объектом оператора ALTER (ИЗМЕНИТЬ) в секции с другим номером сегмента.
Все другие использования оператора ALTER (ИЗМЕНИТЬ) допустимы и выполняются даже в том случае, когда оператор GO ТО (ПЕРЕЙТИ), на который ссылается оператор ALTER (ИЗМЕНИТЬ), находится в фиксированном перекрываемом сегменте.
3.3.2. Оператор PERFORM (ВЫПОЛНИТЬ)
Оператор PERFORM (ВЫПОЛНИТЬ), указанный в секции, не принадлежащей независимому сегменту, может иметь в своей области действия кроме декларативных секций только одну из следующих процедур:
(1) секции и (или) параграфы, полностью содержащиеся в одном или более сегментах, не являющихся независимыми;
(2) секции и (или) параграфы, полностью содержащиеся в одном независимом сегменте.
Оператор PERFORM (ВЫПОЛНИТЬ), указанный в независимом сегменте, может иметь в своей области действия кроме декларативных секций только одну из следующих процедур:
(1) секции и (или) (параграфы, полностью содержащиеся в одном или более сегментах, не являющихся независимыми;
(2) секции и (или) параграфы, полностью содержащиеся в том же независимом сегменте, что и рассматриваемый оператор PERFORM (ВЫПОЛНИТЬ).
3.3.3. Оператор MERGE (СЛИТЬ)
Если оператор MERGE (СЛИТЬ) появляется в секции, не принадлежащей независимому сегменту, то процедура вывода, указанная в операторе MERGE (СЛИТЬ) должна содержаться:
(1) полностью внутри сегментов, не являющихся независимыми, или
(2) целиком содержаться в одном независимом сегменте.
Если оператор MERGE (СЛИТЬ) появляется в независимом сегменте, то процедура вывода, на которую ссылается оператор MERGE (СЛИТЬ), должна содержаться:
(1) полностью внутри сегментов, не являющихся независимыми, или
(2) полностью внутри того же независимого сегмента, в котором находится оператор MERGE (СЛИТЬ).
3.3.4. Оператор SORT (СОРТИРОВАТЬ)
Если оператор SORT (СОРТИРОВАТЬ) появляется в секции, не принадлежащей независимому сегменту, то процедура ввода и процедура вывода, на которую ссылается оператор SORT (СОРТИРОВАТЬ), должны появляться:
1) полностью внутри сегментов, не являющихся независимыми, или
(2) целиком содержаться в одном независимом сегменте.
Если оператор SORT (СОРТИРОВАТЬ) указан в независимом сегменте, то процедура ввода и процедура вывода, на которые ссылается оператор SORT (СОРТИРОВАТЬ), должны содержаться:
(1) полностью внутри сегментов, не являющихся независимыми, или
(2) полностью внутри того же независимого сегмента, в котором находится оператор SORT (СОРТИРОВАТЬ).
Часть 17. ПРИЛОЖЕНИЯ
ПРИЛОЖЕНИЕ 1
Справочное
ОТЛИЧИЯ МЕЖДУ ПРЕДЫДУЩИМ И НАСТОЯЩИМ СТАНДАРТОМ
1. Перечень отличий
Приложение содержит перечень всех элементов ГОСТ 22558 и настоящего стандарта. Элементы упорядочены соответственно разделам Кобола.
Литера "-" в столбце обозначает отсутствие указанного элемента. Наличие элемента определяется трехбуквенным обозначением модуля согласно следующей таблице.
Сокращение | Значение |
ЯДР | Ядро |
ТАБ | Обработка таблиц |
ПОД | Последовательный ввод-вывод |
ОТД | Относительный ввод-вывод |
ИПД | Индексный ввод-вывод |
МПС | Межпрограммные связи |
СРТ | Сортировка-слияние |
ОИТ | Обработка исходных текстов |
БИБ | Библиотека |
ГОТ | Генератор отчетов |
КОМ | Коммуникации |
ОТЛ | Отладка |
СЕГ | Сегментация |
Уровень, на котором встречается элемент в модуле, указан цифрой, предшествующей трехбуквенному сокращению имени модуля. Например, 2 ЯДР указывает, что элемент принадлежит второму уровню ядра, а 1 ИПД - что элемент принадлежит первому уровню модуля индексного ввода-вывода. Литера +, следующая за сокращением имени модуля, обозначает, что элемент является устаревшим элементом в данной редакции стандарта Кобола и будет удален в следующей редакции.
1.1. Перечень отличий в понятиях языка
Элемент | ГОСТ 22558 | Настоящий стандарт |
Понятия языка | ||
Набор литер | ||
Литеры, используемые в словах для английской нотации: | ||
0-9, А-Z, - (дефис) (для русской нотации 0-9, A-Z, А-Я - (дефис)) | 1 ЯДР | 1 ЯДР |
Литеры, используемые в пунктуации: " ( ). пробел | 1 ЯДР | 1 ЯДР |
Литеры, используемые, в пунктуации: , (запятая); точка с запятой | 2 ЯДР | 1 ЯДР |
Литеры, используемые в пунктуации, : (двоеточие) | - | 2 ЯДР |
Литеры, используемые в пунктуации, = | 2 БИБ | 2 ОИТ |
Литеры, используемые в редактировании, В + -, , Z (П) * | ||
0 CR (КP) DB (ДБ) | 1 ЯДР | 1 ЯДР |
Литеры, используемые в арифметических операциях, + - * / ** | 2 ЯДР | 2 ЯДР |
Литеры, используемые в условиях отношения, = > < | 2 ЯДР | 1 ЯДР |
Литеры, используемые в условиях отношения, > = < = | - | 1 ЯДР |
Литеры, используемые при индексировании, + - | 2 ТАБ | 1 ЯДР |
Разрешена замена двумя литерами | 1 ЯДР | 1 ЯДР |
Разрешена замена одной литерой | - | 1 ЯДР |
Замена одной литерой должна быть сделана для недостающих литер Кобола | 1 ЯДР | - |
Разделители | ||
" ( ) . пробел | 1 ЯДР | 1 ЯДР |
, (запятая) ; (точка с запятой) | 2 ЯДР | 1 ЯДР |
: (двоеточие) | - | 2 ЯДР |
= = | 2 БИБ | 2 ОИТ |
Один или больше пробелов, являющихся частью разделителя | - | 1 ЯДР |
Строки-литер | ||
Слова Кобола | ||
Максимум 30 литер | 1 ЯДР | 1 ЯДР |
Системные имена и слова, определенные пользователем, должны образовывать непересекающиеся множества | 1 ЯДР | - |
Системные имена и слова, определенные пользователем, образуют пересекающиеся множества | - | 1 ЯДР |
Слова, определенные пользователем, | ||
Имя-алфавита | 1 ЯДР | 1 ЯДР |
Имя-коммуникации | 1 КОМ | 1 КОМ |
Имя-класса | - | 1 ЯДР |
Имя-условия | 2 ЯДР | 2 ЯДР |
Имя-данного | 1 ЯДР | 1 ЯДР |
Должно начинаться буквой | 1 ЯДР | - |
Не обязательно начинается буквой | 2 ЯДР | 1 ЯДР |
Имя-файла | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
1 ГОТ | 1 ГОТ | |
Имя-индекса | 1 ТАБ | 1 ЯДР |
Номер-уровня | 1 ЯДР | 1 ЯДР |
Имя-библиотеки | 2 БИБ | 2 ОИТ |
Мнемоническое-имя | 1 ЯДР | 1 ЯДР |
Имя-параграфа | 1 ЯДР | 1 ЯДР |
Имя-программы | 1 ЯДР | 1 ЯДР |
Имя-записи | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
Имя-отчета | 1 ГОТ | 1 ГОТ |
Имя-программного-модуля | 1 ЯДР | 1 ЯДР + |
Имя-секции | 1 ЯДР | 1 ЯДР |
Номер-сегмента | 1 СЕГ | 1 СЕГ + |
Символическая-литера | - | 2 ЯДР |
Имя-текста | 1 БИБ | 1 ОИТ |
Системные-имена | ||
Имя-машины | 1 ЯДР | 1 ЯДР |
Имя-реализации | 1 ЯДР | 1 ЯДР |
Имя-языка | 1 ЯДР | 1 ЯДР + |
Зарезервированные слова | ||
Обязательные слова | 1 ЯДР | 1 ЯДР |
Ключевые слова | 1 ЯДР | 1 ЯДР |
Слова-специальные-литеры | ||
Знаки арифметических операций + - * / ** | 2 ЯДР | 2 ЯДР |
Знаки арифметических операций, используемые при индексировании именем-данного, + - | - | 1 ЯДР |
Знаки арифметических операций, используемые при индексировании именем-индекса + - | 2 ТАБ | 1 ЯДР |
Литеры отношения = > < | 2 ЯДР | 1 ЯДР |
Литеры отношения > = < = | - | 1 ЯДР |
Необязательные слова | 1 ЯДР | 1 ЯДР |
Связки | 2 ЯДР | - |
Слова специального назначения | ||
Стандартные константы: ZERO (НУЛЬ), SPACE (ПРОБЕЛ) HIGH-VALUE (НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ), LOW-VALUE (НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ), QUOTE (КАВЫЧКА) | 1 ЯДР | 1 ЯДР |
Стандартные константы: ZEROES, ZEROS (НУЛИ), SPACES (ПРОБЕЛЫ), HIGH-VALUES (НАИБОЛЬШИЕ-ЗНАЧЕНИЯ), LOW-VALUES (НАИМЕНЬШИЕ-ЗНАЧЕНИЯ), QUOTES (КАВЫЧКИ) | 2 ЯДР | 1 ЯДР |
Стандартные константы: ALL литерал (ВСЕ литерал) | 2 ЯДР | 2 ЯДР |
Стандартные константы: | ||
символическая-литера, | ||
ALL стандартная-константа | ||
(ВСЕ стандартная-константа), | ||
ALL символическая-литера | ||
(ВСЕ символическая-литера) | - | 2 ЯДР |
Специальные регистры | ||
LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) | 2 ПОД | 2 ПОД |
LINE-COUNTER (СЧЕТЧИК-СТРОК) | 1 ГОТ | 1 ГОТ |
PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) | 1 ГОТ | 1 ГОТ |
DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) | 1 ОТЛ | 1 ОТЛ + |
Литералы | ||
Числовые литералы: от 1 до 18 цифр | 1 ЯДР | 1 ЯДР |
Нечисловые литералы от 1 до 120 литер | 1 ЯДР | - |
Нечисловые литералы: от 1 до 160 литер | - | 1 ЯДР |
Нечисловые литералы: длина зависит от представления в объектной программе | - | 1 ЯДР |
PICTURE строка-литер (ШАБЛОН строка-литер) | 1 ЯДР | 1 ЯДР |
Статья-комментарий | 1 ЯДР | 1 ЯДР + |
Однозначность ссылки | ||
Однозначность ссылки, требуемая во время ссылки | - | 1 ЯДР |
Однозначность ссылки, требуемая во время спецификации | 2 ЯДР | - |
Уточнение | ||
Уточнение не разрешается | 1 ЯДР | 1 ЯДР |
Уточнение разрешается | 2 ЯДР | 2 ЯДР |
Должно быть разрешено по крайней мере 5 уровней уточнения | 2 ЯДР | - |
50 уточнителей | - | 2 ЯДР |
Индексирование (имя-данного/литерал) | 1ТАБ | 1 ЯДР |
3 уровня | 1 ТАБ | 1 ЯДР |
7 уровней | - | 2 ЯДР |
Индексирование (имя-индекса) | 1 ТАБ | 1 ЯДР |
3 уровня | 1 ТАБ | 1 ЯДР |
7 уровней | - | 2 ЯДР |
Относительное индексирование именем-данного | - | 1 ЯДР |
Относительное индексирование именем-индекса | 1 ТАБ | 1 ЯДР |
Модификация ссылки | - | 2 ЯДР |
Формат представления | ||
Порядковый номер | 1 ЯДР | 1 ЯДР |
Должен быть цифровым | 1 ЯДР | - |
Может содержать любую литеру из набора литер машины | - | 1 ЯДР |
Продолжение строк | ||
Продолжение нечисловых литералов | 1 ЯДР | 1 ЯДР |
Продолжение слов Кобола, числовых литералов | 2 ЯДР | 1 ЯДР |
Продолжение строки-литер шаблона | - | 2 ЯДР |
Внутри продолжения допускаются строки комментария | 1 ЯДР | 1 ЯДР |
Внутри продолжения допускаются строки пробелов | - | 1 ЯДР |
Строки пробелов (пустые строки) | 1 ЯДР | 1 ЯДР |
Строки комментария | ||
Строка комментария со * (звездочкой) | 1 ЯДР | 1 ЯДР |
Строка комментария с / (наклонной чертой) | 1 ЯДР | 1 ЯДР |
Строка отладочная D (Т) в поле индикатора | 1 ОТЛ | 1 ЯДР |
Структура исходной программы | ||
Раздел идентификации обязателен | 1 ЯДР | 1 ЯДР |
Раздел оборудования необязателен | - | 1 ЯДР |
Раздел данных необязателен | - | 1 ЯДР |
Раздел процедур необязателен | - | 1 ЯДР |
Заголовок конца программы | - | 2 ЯДР |
Вложенные исходные программы | - | 2 МПС |
| ||
РАЗДЕЛ ИДЕНТИФИКАЦИИ | ||
Параграф PROGRAM-ID (ПРОГРАММА) | ||
Имя-программы | 1 ЯДР | 1 ЯДР |
Идентифицирует исходную-программу и листинги | 1 ЯДР | 1 ЯДР |
Идентифицирует объектную программу | - | 1 ЯДР |
Фраза COMMON (ОБЩАЯ) | - | 2 МС |
Фраза INITIAL (НАЧАЛЬНАЯ) | - | 2 МПС |
Параграф AUTHOR (АВТОР) | 1 ЯДР | 1 ЯДР + |
Параграф INSTALLATION (ПРЕДПРИЯТИЕ) | 1 ЯДР | 1 ЯДР + |
Параграф DATE-WRITTEN (ДАТА-НАПИСАНИЯ) | 1 ЯДР | 1 ЯДР + |
Параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) | 2 ЯДР | 2 ЯДР + |
Параграф SECURITY (ПОЛНОМОЧИЯ) | 1 ЯДР | 1 ЯДР + |
1.3. Перечень отличий в разделе оборудования | ||
РАЗДЕЛ ОБОРУДОВАНИЯ | ||
Раздел оборудования обязателен | 1 ЯДР | - |
Раздел оборудования необязателен | - | 1 ЯДР |
Секция конфигурации | ||
Секция конфигурации обязательна | 1 ЯДР | - |
Секция конфигурации необязательна | - | 1 ЯДР |
Параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) | ||
Параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) обязателен | 1 ЯДР | - |
Параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) необязателен | - | 1 ЯДР |
Может быть определен пустой параграф | - | 1 ЯДР |
Имя-машины | 1 ЯДР | 1 ЯДР |
Фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) для отладочных строк | 1 ОТЛ | 1 ЯДР |
Фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) для отладочных секций | 1 ОТЛ | 1 ОТЛ + |
Параграф OBJECT-COMPUTER (РАБОЧАЯ MAШИНА) | ||
Параграф OBJECT-COMPUTER (РАБОЧАЯ МАШИНА) обязателен | 1 ЯДР | - |
Параграф OBJECT-COMPUTER (РАБОЧАЯ МАШИНА) необязателен | - | 1 ЯДР |
Может быть определен пустой параграф | - | 1 ЯДР |
Имя-машины | 1 ЯДР | 1 ЯДР |
Фраза MEMORY SIZE (РАЗМЕР ПАМЯТИ) | 1 ЯДР | 1 ЯДР + |
Фраза PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ) | 1 ЯДР | 1 ЯДР |
Фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) | 2 СЕГ | 2 СЕГ + |
Параграф SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ ИМЕНА) | ||
Фраза ALPHABET (АЛФАВИТ) | 1 ЯДР | 1 ЯДР |
Вариант STANDARD-1 (СТАНДАРТ-А) | 1 ЯДР | 1 ЯДР |
Вариант STANDARD-2 (СТАНДАРТ-М) | - | 1 ЯДР |
Вариант СТАНДАРТ-Р | 1 ЯДР | 1 ЯДР |
Вариант NATIVE (ВНУТРЕННИЙ) | 1 ЯДР | 1 ЯДР |
Вариант имя-реализации | 1 ЯДР | 1 ЯДР |
Вариант литерал | 2 ЯДР | 2 ЯДР |
Фраза CLASS (КЛАСС) | - | 1 ЯДР |
Фраза CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК) | 1 ЯДР | 1 ЯДР |
Литерал может быть стандартной константой | 1 ЯДР | - |
Фраза DECIMAL-POINT (ДЕСЯТИЧНАЯ ТОЧКА) | 1 ЯДР | 1 ЯДР |
Фраза имя-реализации | 1 ЯДР | 1 ЯДР |
Вариант мнемоническое-имя | 1 ЯДР | 1 ЯДР |
Если имя-реализации является переключателем, должно быть указано имя-условия | 1 ЯДР | - |
Если имя-реализации является переключателем, имя-условия может быть не указано | - | 1 ЯДР |
Вариант ON STATUS IS имя-условия (ВКЛЮЧЕНО имя-условия) | 1 ЯДР | 1 ЯДР |
Вариант OFF STATUS IS имя-условия (ВЫКЛЮЧЕНО имя-условия) | 1 ЯДР | 1 ЯДР |
Фраза SYMBOLIC CHARACTERS (СИМВОЛИЧЕСКАЯ ЛИТЕРА) | - | 2 ЯДР |
Секция ввода-вывода | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
1 ГОТ | 1 ГОТ | |
Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
1 ГОТ | 1 ГОТ | |
Статья управления файлом | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
1 ГОТ | 1 ГОТ | |
Фраза SELECT (ДЛЯ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
1 ГОТ | 1 ГОТ | |
Вариант OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) | 2 ПОД | 2 ПОД |
2 ОТД | ||
2 ИПД | ||
1 ГОТ | ||
Входной файл | 2 ПОД | 2 ПОД |
2 ОТД | ||
2 ИПД | ||
Входной-выходной файл | - | 2 ПОД |
2 ОТД | ||
2 ИПД | ||
Дополняемый файл | - | 2 ПОД |
2 ОТД | ||
2 ИПД | ||
2 ГОТ | ||
Имя-файла ссылается на определитель файла | - | 1 ПОД |
1 ОТД | ||
1 ИПД | ||
1 СРТ | ||
1 ГОТ | ||
Фраза ACCESS MODE (ДОСТУП) SEQUENTIAL (ПОСЛЕДОВАТЕЛЬНЫЙ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
RANDOM (ПРОИЗВОЛЬНЫЙ) | 1 ОТД | 1 ОТД |
| 1 ИПД | 1 ИПД |
DYNAMIC (ДИНАМИЧЕСКИЙ) | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
Вариант RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) | 1 ОТД | 1 ОТД |
Фраза ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) | 2 ИПД | 2 ИПД |
Вариант WITH DUPLICATES (С ДУБЛИРОВАНИЕМ) | 2 ИПД | 2 ИПД |
Фраза ASSIGN (НАЗНАЧИТЬ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
1 ГОТ | 1 ГОТ | |
Имя-реализации | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
1 ГОТ | 1 ГОТ | |
литерал | - | 1 ПОД |
1 ОТД | ||
1 ИПД | ||
1 СРТ | ||
1 ГОТ | ||
Фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Фраза ORGANIZATION (ОРГАНИЗАЦИЯ) | ||
SEQUENTIAL (ПОСЛЕДОВАТЕЛЬНАЯ) | 1 ПОД | 1 ПОД |
1 ГОТ | 1 ГОТ | |
RELATIVE (ОТНОСИТЕЛЬНАЯ) | 1 ОТД | 1 ОТД |
INDEXED (ИНДЕКСНАЯ) | 1 ИПД | 1 ИПД |
Фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) | - | 2 ПОД |
1 ГОТ | ||
Фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) | - | 2 ПОД |
1 ГОТ | ||
Фраза RECORD KEY (КЛЮЧ ЗАПИСИ) | 1 ИПД | 1 ИПД |
Фраза RESERVE AREA (РЕЗЕРВИРОВАТЬ ОБЛАСТЕЙ) | 2 ПОД | 2 ПОД |
2 ОТД | 2 ОТД | |
2 ИПД | 2 ИПД | |
1 ГОТ | 1 ГОТ | |
Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) | 2 ПОД | 1 ПОД |
2 ОТД | 1 ОТД | |
2 ИПД | 1 ИПД | |
2 СРТ | 1 СРТ | |
1 ГОТ | ||
Порядок фраз несущественен | - | 1 ПОД |
1 ОТД | ||
1 ИПД | ||
1 СРТ | ||
1 ГОТ | ||
Фраза MULTIPLE FILE ТАРЕ (НА ОДНОЙ КАТУШКЕ) | 2 ПОД | 2 ПОД + |
1 ГОТ + | ||
Фраза RERUN (ПЕРЕПРОГОН) | 1 ПОД | 1 ПОД + |
1 ОТД | 1 ОТД + | |
1 ИПД | 1 ИПД + | |
Фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Фраза SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) | 2 ПОД | 2 ПОД |
2 ОТД | 2 ОТД | |
2 ИПД | 2 ИПД | |
2 СРТ | 1 СРТ | |
Фраза SAME SORT/SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ/СОРТИРОВКИ-СЛИЯНИЯ) | 2 СРТ | 1 СРТ |
| ||
РАЗДЕЛ ДАННЫХ | ||
Раздел данных обязателен | 1 ЯДР | - |
Раздел данных необязателен | - | 1 ЯДР |
Секция файлов | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
1 ГОТ | 1 ГОТ | |
Статья описания файла | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Индикатор уровня FD (ОФ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Фраза BLOCK CONTAINS (В БЛОКЕ) | ||
Целое RECORDS/CHARACTERS (целое ЗАПИСЕЙ/ЛИТЕР) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Целое-1 ТО целое-2 RECORDS/CHARACTERS (ОТ целое-1 ДО целое-2 ЗАПИСЕЙ/ЛИТЕР) | 2 ПОД | 2 ПОД |
2 ОТД | 2 ОТД | |
2 ИПД | 2 ИПД | |
1 ГОТ | 1 ГОТ | |
Фраза CODE-SET (АЛФАВИТ) | 1 ПОД | 1 ПОД |
1 ГОТ | 1 ГОТ | |
Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) | 1 ПОД | 1 ПОД + |
1 ОТД | 1 ОТД + | |
1 ИПД | 1 ИПД + | |
Фраза EXTERNAL (ВНЕШНЕЕ) | - | 2 МПС |
Фраза GLOBAL (ГЛОБАЛЬНОЕ) | - | 2 МПС |
Фраза LABEL RECORDS (МЕТКИ) | 1 ПОД | 1 ПОД + |
1 ОТД | 1 ОТД + | |
1 ИПД | 1 ИПД + | |
1 ГОТ | 1 ГОТ + | |
Фраза LINAGE (ВЕРСТКА) | 2 ПОД | 2 ПОД |
Вариант FOOTING (КОНЦОВКА) | 2 ПОД | 2 ПОД |
Вариант ТОР (ВЕРХНЕЕ ПОЛЕ) | 2 ПОД | 2 ПОД |
Вариант BOTTOM (НИЖНЕЕ ПОЛЕ) | 2 ПОД | 2 ПОД |
Фраза RECORD (В ЗАПИСИ) | ||
целое-1 CHARACTERS (целое-1 ЛИТЕР) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Вариант VARYING IN SIZE (ПЕРЕМЕННОЕ ЧИСЛО) | - | 2 ПОД |
2 ОТД | ||
2 ИПД | ||
целое-4 ТО целое-5 CHARACTERS (целое-4 ДО целое-5 ЛИТЕР) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Фраза REPORT (ОТЧЕТ) | 1 ГОТ | 1 ГОТ |
Фраза VALUE (ЗНАЧЕНИЕ) | ||
Имя-реализации литерал-1 | 1 ПОД | 1 ПОД + |
1 ОТД | 1 ОТД + | |
1 ИПД | 1 ИПД + | |
1 ГОТ | 1 ГОТ + | |
Имя-реализации несколько-литералов | 1 ПОД | 1 ПОД + |
1 ОТД | 1 ОТД + | |
1 ИПД | 1 ИПД + | |
1 ГОТ | 1 ГОТ + | |
Имя-реализации имя-данного | 2 ПОД | 2 ПОД + |
2 ОТД | 2 ОТД + | |
2 ИПД | 2 ИПД + | |
1 ГОТ | 1 ГОТ + | |
Имя-реализации несколько имен-данных | 2 ПОД | 2 ПОД + |
2 ОТД | 2 ОТД + | |
2 ИПД | 2 ИПД + | |
1 ГОТ | 1 ГОТ + | |
Статья описания сортируемого-сливаемого файла | 1 СРТ | 1 СРТ |
Индикатор уровня SD (ОС) | 1 СРТ | 1 СРТ |
Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) | 1 СРТ | 1 СРТ + |
Фраза RECORD (В ЗАПИСИ) | ||
Целое-1 CHARACTERS (целое-1 ЛИТЕР) | 1 СРТ | 1 СРТ |
Фраза VARYING IN SIZE (ПЕРЕМЕННОЕ ЧИСЛО) | - | 1 СРТ |
Целое-4 ТО целое-5 CHARACTERS (целое-4 ДО целое-5 ЛИТЕР) | 1 СРТ | 1 СРТ |
Статья описания записи в секции файлов | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 СРТ | 1 СРТ | |
Секция рабочей памяти | 1 ЯДР | 1 ЯДР |
Статья описания записи | 1 ЯДР | 1 ЯДР |
Статья описания уровня 77 | 1 ЯДР | 1 ЯДР |
Секция связи | 1 МПС | 1 МПС |
Статья описания записи | 1 МПС | 1 МПС |
Статья описания уровня 77 | 1 МПС | 1 МПС |
Секция коммуникаций | 1 КОМ | 1 КOM |
Статья описания коммуникации | 1 КОМ | 1 КОМ |
Индикатор уровня CD (ОК) | 1 КОМ | 1 КОМ |
Фраза FOR INPUT (ДЛЯ ВВОДА) | 1 КОМ | 1 КОМ |
Фраза INITIAL (НАЧАЛЬНОГО) | 2 КОМ | 2 КОМ |
Фраза END KEY (КЛЮЧ КОНЦА) | 1 КОМ | 1 КОМ |
Фраза MESSAGE COUNT (ЧИСЛО СООБЩЕНИЙ) | 1 КOM | 1 КОМ |
Фраза MESSAGE DATE (ДАТА СООБЩЕНИЙ) | 1 КОМ | 1 KOM |
Фраза MESSAGE TIME (ВРЕМЯ СООБЩЕНИЯ) | 1 КОМ | 1 КОМ |
Фраза SYMBOLIC QUEUE (СИМВОЛИЧЕСКАЯ ОЧЕРЕДЬ) | 1 КОМ | 1 КОМ |
Фраза SYMBOLIC SOURCE (СИМВОЛИЧЕСКИЙ ИСТОЧНИК) | 1 КОМ | 1 КОМ |
Фраза SYMBOLIC SUB-QUEUE-1 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-1) | 1 КОМ | 2 КОМ |
Фраза SYMBOLIC SUB-QUEUE-2 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-2) | 1 КОМ | 2 КОМ |
Фраза SYMBOLIC SUB-QUEUE-3 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-3) | 1 КOM | 2 КОМ |
Фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) | 1 КОМ | 1 КОМ |
Фраза TEXT LENGTH (ДЛИНА ТЕКСТА) | 1 КОМ | 1 КОМ |
Несколько имен-данных | 1 КОМ | 2 КОМ |
Фраза FOR OUTPUT (ДЛЯ ВЫВОДА) | 1 КОМ | 1 КОМ |
Фраза DESTINATION COUNT (ЧИСЛО АДРЕСАТОВ) | 1 КОМ | 1 КОМ |
Должен быть один | 1 КОМ | 1 КОМ |
Должен быть один или больше | 2 КОМ | 2 КОМ |
Фраза DESTINATION TABLE (ТАБЛИЦА АДРЕСАТОВ) | 1 КОМ | 2 КОМ |
Фраза INDEXED BY (ИНДЕКСИРУЕТСЯ) | 1 КOM | 2 КОМ |
Фраза ERROR KEY (КЛЮЧ ОШИБКИ) | 1 КOM | 1 КОМ |
Фраза SYMBOLIC DESTINATION (СИМВОЛИЧЕСКИЙ АДРЕСАТ) | 1 КОМ | 1 КОМ |
Фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) | 1 КОМ | 1 КОМ |
Фраза TEXT LENGTH (ДЛИНА ТЕКСТА) | 1 КОМ | 1 КОМ |
Фраза FOR I-O (ДЛЯ ВВОДА-ВЫВОДА) | - | 1 КОМ |
Фраза INITIAL (НАЧАЛЬНОГО) | - | 2 КОМ |
Фраза END KEY (КЛЮЧ КОНЦА) | - | 1 КОМ |
Фраза MESSAGE DATE (ДАТА СООБЩЕНИЯ) | - | 1 КОМ |
Фраза MESSAGE TIME (ВРЕМЯ СООБЩЕНИЯ) | - | 1 КОМ |
Фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) | - | 1 КОМ |
Фраза SYMBOLIC TERMINAL (СИМВОЛИЧЕСКИЙ ТЕРМИНАЛ) | - | 1 КОМ |
Фраза TEXT LENGTH (ДЛИНА ТЕКСТА) | - | 1 КОМ |
Несколько имен-данных | - | 2 КОМ |
Статья описания записи | 1 КОМ | 1 КОМ |
Секция отчетов | 1 ГОТ | 1 ГОТ |
Статья описания отчета | 1 ГОТ | 1 ГОТ |
Индикатор уровня FD (00) | 1 ГОТ | 1 ГОТ |
Фраза CODE (С КОДОМ) | 1 ГОТ | 1 ГОТ |
Фраза CONTROL (УПРАВЛЕНИЕ) | 1 ГОТ | 1 ГОТ |
Фраза GLOBAL (ГЛОБАЛЬНОЕ) | - | 1 МПС |
Фраза PAGE (РАЗМЕР СТРАНИЦЫ) | 1 ГОТ | 1 ГОТ |
Статья описания группы отчета | 1 ГОТ | 1 ГОТ |
Следующие фразы появляются в статье описания записи, статье описания данного, статье описания уровня 77 или в статье описания группы отчета. | ||
Фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Фраза COLUMN NUMBER (НОМЕР СТОЛБЦА) | 1 ГОТ | 1 ГОТ |
Фраза имя-данного | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Фраза EXTERNAL (ВНЕШНЕЕ) | - | 2 МПС |
Фраза FILLER (ЗАПОЛНИТЕЛЬ) | 1 ЯДР | 1 ЯДР |
Фраза FILLER (ЗАПОЛНИТЕЛЬ) необязательна | - | 1 ЯДР |
Элементарное данное | 1 ЯДР | 1 ЯДР |
Групповое данное | - | 1 ЯДР |
Фраза GLOBAL (ГЛОБАЛЬНОЕ) | - | 2 МПС |
Фраза JUSTIFIED (СДВИНУТО) | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Фраза номер-уровня | 1 ЯДР | 1 ЯДР |
От 01 до 10; представление двумя цифрами | 1 ЯДР | - |
От 01 до 49; представление одной или двумя цифрами | 2 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
66 | 2 ЯДР | 2 ЯДР |
77 | 1 ЯДР | 1 ЯДР |
88 | 2 ЯДР | 2 ЯДР |
Фраза LINE NUMBER (НОМЕР СТРОКИ) | 1 ГОТ | 1 ГОТ |
Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) | 1 ГОТ | 1 ГОТ |
Фраза OCCURS (ПОВТОРЯЕТСЯ) | 1 ТАБ | 1 ЯДР |
Целое TIMES (целое РАЗ) | 1 ТАБ | 1 ЯДР |
Фраза ASCENDING/DESCENDING KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) | 2 ТАБ | 2 ЯДР |
Фраза INDEXED BY (ИНДЕКСИРУЕТСЯ) | 1 ТАБ | 1 ЯДР |
Фраза целое-1 ТО целое-2 TIMES-DEPENDING ON (ОТ целое-1 ДО целое-2 РАЗ В ЗАВИСИМОСТИ ОТ) | 2 ТАБ | 2 ЯДР |
Целое-1 может быть нулем | - | 2 ЯДР |
Имя-данного в фразе DEPENDING ON (В ЗАВИСИМОСТИ ОТ) должно быть положительным целым | 2 ТАБ | 2 ЯДР |
Фраза PICTURE (ШАБЛОН) | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Строка-литер содержит максимум 30 литер | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Литеры данных: X 9 А | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Операционные символы: S V Р (З Т М) | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Литеры фиксированной вставки: В + - . , | ||
1 ЯДР | 1 ЯДР | |
1 ГОТ | 1 ГОТ | |
Литера В разрешается в буквенном данном | 1 ЯДР | - |
1 ГОТ | - | |
Литеры замены или плавающей вставки | ||
1 ЯДР | 1 ЯДР | |
1 ГОТ | 1 ГОТ | |
Замена валютного знака | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Замена десятичной точки | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Фраза REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) | 1 ЯДР | 1 ЯДР |
Не может быть вложенной | 1 ЯДР | 1 ЯДР |
Может быть вложенной | 2 ЯДР | 2 ЯДР |
Переопределение уровней 01 может быть больше размера поля оригинала | 1 ЯДР | 1 ЯДР |
Переопределение уровней, отличных от 01, должно равняться размеру поля оригинала | 1 ЯДР | - |
Переопределение уровней, отличных от 01, должно быть меньше или равно размеру поля оригинала | - | 1 ЯДР |
Фраза RENAMES (ПЕРЕИМЕНОВЫВАЕТ) | 2 ЯДР | 2 ЯДР |
Фраза SIGN (ЗНАК) | 1 ЯДР | 1 ЯДР |
- | 1 ГОТ | |
Фраза SOURCE (ИСТОЧНИК) | 1 ГОТ | 1 ГОТ |
Фраза SUM (СУММА) | 1 ГОТ | 1 ГОТ |
Фраза SYNCHRONIZED (ВЫДЕЛЕНО) | 1 ЯДР | 1 ЯДР |
Фраза TYPE (ТИП) | 1 ГОТ | 1 ГОТ |
Фраза USAGE (об использовании) | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
BYNARY (ДВОИЧНОЕ) | - | 1 ЯДР |
COMPUTATIONAL (ДЛЯ ВЫЧИСЛЕНИЙ) | 1 ЯДР | 1 ЯДР |
DISPLAY (ДЛЯ ВЫДАЧИ) | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
INDEX (ДЛЯ ИНДЕКСА) | 1 ТАБ | 1 ЯДР |
PACKED-DECIMAL (ДЕСЯТИЧНОЕ) | - | 1 ЯДР |
Фраза VALUE (ЗНАЧЕНИЕ) | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Литерал | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Несколько литералов | 2 ЯДР | 2 ЯДР |
Литерал-1 THROUGH литерал-2 (литерал-1 ПО литерал-2) | 2 ЯДР | 2 ЯДР |
Несколько диапазонов литералов | 2 ЯДР | 2 ЯДР |
| ||
РАЗДЕЛ ПРОЦЕДУР | ||
Раздел процедур обязателен | 1 ЯДР | - |
Раздел процедур необязателен | - | 1 ЯДР |
Заголовок раздела процедур | 1 ЯДР | 1 ЯДР |
Фраза USING (ИСПОЛЬЗУЯ) | 1 МПС | 1 МПС |
Разрешается по крайней мере 5 операндов | - | 1 МПС |
Для числа операндов нет ограничения | 1 МПС | 2 МПС |
Декларативные процедуры | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
1 ОТД | 1 ОТЛ + | |
Вариант DECLARATIVES (ДЕКЛАРАТИВЫ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
1 ОТЛ | 1 ОТЛ + | |
Вариант END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
1 ОТЛ | 1 ОТЛ + | |
Арифметические выражения | 2 ЯДР | 2 ЯДР |
Знаки бинарных арифметических операций | ||
+ - * / ** | 2 ЯДР | 2 ЯДР |
Знаки унарных арифметических операций | 2 ЯДР | 2 ЯДР |
Условные выражения | 1 ЯДР | 1 ЯДР |
Простое условие | 1 ЯДР | 1 ЯДР |
Условие отношения | 1 ЯДР | 1 ЯДР |
Знаки условий отношения | ||
[NOT] GREATER THAN ([HE] БОЛЬШЕ) | 1 ЯДР | 1 ЯДР |
[NOT] > ([HE]>) | 2 ЯДР | 1 ЯДР |
[NOT] LESS THAN ([HE] МЕНЬШЕ) | 1 ЯДР | 1 ЯДР |
[NOT]< ([НЕ]<) | 2 ЯДР | 1 ЯДР |
[NOT] EQUAL TO ([HE] РАВНО) | 1 ЯДР | 1 ЯДР |
[NOT] = ([HE] = ) | 2 ЯДР | 1 ЯДР |
GREATER THAN OR EQUAL TO (БОЛЬШЕ ИЛИ РАВНО) | - | 1 ЯДР |
> = | - | 1 ЯДР |
LESS THAN OR EQUAL TO (МЕНЬШЕ ИЛИ РАВНО) | - | 1 ЯДР |
< = | - | 1 ЯДР |
Сравнение числовых операндов | 1 ЯДР | 1 ЯДР |
Сравнение нечисловых операндов | ||
Операнды должны быть одинакового размера | 1 ЯДР | - |
Операнды могут быть разного размера | 2 ЯДР | 1 ЯДР |
Сравнение имен-индексов и (или) индексных данных | 1 ТАБ | 1 ЯДР |
Условие класса | 1 ЯДР | 1 ЯДР |
NUMERIC (ЧИСЛОВОЕ) | 1 ЯДР | 1 ЯДР |
ALPHABETIC (БУКВЕННОЕ) (прописные буквенные литеры) | 1 ЯДР | - |
ALPHABETIC (БУКВЕННОЕ) (прописные и строчные буквенные литеры) | - | 1 ЯДР |
ALPHABETIC-LOWER (СТРОЧНЫЕ) | - | 1 ЯДР |
ALPHABETIC-UPPER (ПРОПИСНЫЕ) | - | 1 ЯДР |
Имя-класса | - | 1 ЯДР |
Условие имени-условия | 2 ЯДР | 2 ЯДР |
Условие знака | 2 ЯДР | 2 ЯДР |
Условие состояния-переключателя | 1 ЯДР | 1 ЯДР |
Сложное условие | 2 ЯДР | 2 ЯДР |
Знаки логических операций AND (И) OR (ИЛИ) NOT (HE) | 2 ЯДР | 2 ЯДР |
Отрицание условия | 2 ЯДР | 2 ЯДР |
Комбинированное условие | 2 ЯДР | 2 ЯДР |
Условия в скобках | 2 ЯДР | 1 ЯДР |
Сокращенные комбинированные условия отношения | 2 ЯДР | 2 ЯДР |
Арифметические операторы | 1 ЯДР | 1 ЯДР |
Арифметические операнды ограничены 18 цифрами | 1 ЯДР | 1 ЯДР |
Размер операндов ограничен 18 цифрами | 1 ЯДР | 1 ЯДР |
Оператор ACCEPT (ПРИНЯТЬ) | 1 ЯДР | 1 ЯДР |
Идентификатор | 1 ЯДР | 1 ЯДР |
Только одна передача данных | 1 ЯДР | 1 ЯДР |
Нет ограничения на число передач данных | 2 ЯДР | 2 ЯДР |
Фраза FROM мнемоническое-имя (С мнемоническое-имя) | 2 ЯДР | 2 ЯДР |
Фраза FROM DATE/DAY/TIME (ДАТУ/ДЕНЬ/ ВРЕМЯ) | 2 ЯДР | 2 ЯДР |
Фраза FROM DAY-OF-WEEK (ДЕНЬ-НЕДЕЛИ) | - | 2 ЯДР |
Оператор ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ) | 1 КОМ | 1 КОМ |
Оператор ADD (СЛОЖИТЬ) | 1 ЯДР | 1 ЯДР |
Идентификатор/литерал | 1 ЯДР | 1 ЯДР |
Несколько идентификаторов/литералов | 1 ЯДР | 1 ЯДР |
ТО идентификатор (С идентификатор) | 1 ЯДР | 1 ЯДР |
ТО несколько идентификаторов (С несколько идентификаторов) | 2 ЯДР | 1 ЯДР |
ТО идентификатор/литерал GIVING идентификатор (С идентификатор/литерал ПОЛУЧАЯ идентификатор) | - | 1 ЯДР |
ТО идентификатор/литерал GIVING несколько идентификаторов (С идентификатор/литерал ПОЛУЧАЯ несколько идентификаторов) | - | 1 ЯДР |
GIVING идентификатор (ПОЛУЧАЯ идентификатор) | 1 ЯДР | 1 ЯДР |
GIVING несколько идентификаторов (ПОЛУЧАЯ несколько идентификаторов) | 2 ЯДР | 1 ЯДР |
Вариант ROUNDED (ОКРУГЛЯЯ) | 1 ЯДР | 1 ЯДР |
Вариант ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) | 1 ЯДР | 1 ЯДР |
Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) | - | 1 ЯДР |
Вариант END-ADD (КОНЕЦ-СЛОЖИТЬ) | - | 1 ЯДР |
Вариант CORRESPONDING (СООТВЕТСТВЕННО) | 2 ЯДР | 2 ЯДР |
Оператор ALTER (ИЗМЕНИТЬ) | 1 ЯДР | 1 ЯДР + |
Только одно имя-процедуры | 1 ЯДР | 1 ЯДР + |
Несколько имен-процедур | 2 ЯДР | 2 ЯДР + |
Оператор CALL (ВЫЗВАТЬ) | 1 МПС | 1 МПС |
Литерал | 1 МПС | 1 МПС |
Идентификатор | 2 МПС | 2 МПС |
Вариант USING (ИСПОЛЬЗУЯ) | 1 МПС | 1 МПС |
Идентификатор | 1 МПС | 1 МПС |
Разрешается по крайней мере 5 операндов | - | 1 МПС |
Нет ограничений на число допустимых операндов | 1 МПС | 2 МПС |
Элементарное данное с уровнем, отличным от 01 | - | 1 МПС |
Вариант BY REFERENCE (ССЫЛКУ НА) | - | 2 МПС |
Вариант BY CONTENT (ЗНАЧЕНИЕ) | - | 2 МПС |
Вариант ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) | - | 2 МПС |
Вариант NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) | - | 2 МПС |
Вариант END-CALL (КОНЕЦ-ВЫЗВАТЬ) (формат 1) | - | 1 МПС |
Вариант END-CALL (КОНЕЦ-ВЫЗВАТЬ) (формат 2) | - | 2 МПС |
Оператор CANCEL (ОСВОБОДИТЬ) | 2 МПС | 2 МПС |
Литерал | 2 МПС | 2 МПС |
Идентификатор | 2 МПС | 2 МПС |
Оператор CLOSE (ЗАКРЫТЬ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Имя-файла | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Несколько имен-файлов | 2 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант REEL/UNIT (КАТУШКУ/ТОМ) | 1 ПОД | 1 ПОД |
1 ГОТ | 1 ГОТ | |
Вариант FOR REMOVAL (С УДАЛЕНИЕМ) | 2 ПОД | 2 ПОД |
1 ГОТ | 1 ГОТ | |
Вариант WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) | 2 ПОД | 2 ПОД |
1 ГОТ | 1 ГОТ | |
Вариант WITH LOCK (С ЗАМКОМ) | 2 ПОД | 2 ПОД |
1 ОТД | 2 ОТД | |
1 ИПД | 2 ИПД | |
1 ГОТ | 1 ГОТ | |
Оператор COMPUTE (ВЫЧИСЛИТЬ) | 2 ЯДР | 2 ЯДР |
Арифметическое выражение | 2 ЯДР | 2 ЯДР |
Несколько идентификаторов | 2 ЯДР | 2 ЯДР |
Вариант ROUNDED (ОКРУГЛЯЯ) | 2 ЯДР | 2 ЯДР |
Вариант ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) | 2 ЯДР | 2 ЯДР |
Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) | - | 2 ЯДР |
Вариант END-COMPUTE (КОНЕЦ-ВЫЧИСЛИТЬ) | - | 2 ЯДР |
Оператор CONTINUE (ПРОДОЛЖИТЬ) | - | 1 ЯДР |
Оператор DELETE (УДАЛИТЬ) | 1 ОТД | 1 ОТД |
1 ИПД | 1 ИПД | |
Вариант INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) | 1 ОТД | 1 ОТД |
1 ИПД | 1 ИПД | |
Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) | - | 1 ОТД |
1 ИПД | ||
Вариант END-DELETE (КОНЕЦ-УДАЛИТЬ) | - | 1 ОТД |
1 ИПД | ||
Оператор DISABLE (ЗАПРЕТИТЬ) | 1 КОМ | 2 КОМ |
Вариант INPUT (ВВОД) | 1 КОМ | 2 КОМ |
Вариант TERMINAL (С ТЕРМИНАЛА) | 2 КОМ | 2 КОМ |
Вариант I-O TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА) | - | 2 КОМ |
Вариант OUTPUT (ВЫВОД) | 1 КОМ | 2 КОМ |
Вариант KEY (КЛЮЧ) | 1 КОМ | 2 КОМ + |
Оператор DISPLAY (ВЫДАТЬ) | 1 ЯДР | 1 ЯДР |
Только одна передача данных | 1 ЯДР | 1 ЯДР |
Нет ограничений на число передач данных | 2 ЯДР | 2 ЯДР |
Идентификатор/литерал | 1 ЯДР | 1 ЯДР |
Несколько идентификаторов/литералов | 1 ЯДР | 1 ЯДР |
Вариант UPON мнемоническое имя (НА мнемоническое имя) | 2 ЯДР | 2 ЯДР |
Вариант WITH NO ADVANCING (БЕЗ ПРОДВИЖЕНИЯ) | - | 2 ЯДР |
Оператор DIVIDE (РАЗДЕЛИТЬ) | 1 ЯДР | 1 ЯДР |
BY идентификатор/литерал (НА идентификатор/литерал) | 1 ЯДР | 1 ЯДР |
INTO идентификатор (идентификатор НА) | 1 ЯДР | 1 ЯДР |
INTO несколько идентификаторов (несколько идентификаторов НА) | 2 ЯДР | 1 ЯДР |
GIVING идентификатор (ПОЛУЧАЯ идентификатор) | 1 ЯДР | 1 ЯДР |
GIVING несколько идентификаторов (ПОЛУЧАЯ несколько идентификаторов) | 2 ЯДР | 1 ЯДР |
Вариант ROUNDED (ОКРУГЛЯЯ) | 1 ЯДР | 1 ЯДР |
Вариант REMAINDER (ОСТАТОК) | 2 ЯДР | 2 ЯДР |
Вариант ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) | 1 ЯДР | 1 ЯДР |
Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) | - | 1 ЯДР |
Вариант END-DIVIDE (КОНЕЦ-РАЗДЕЛИТЬ) | - | 1 ЯДР |
Оператор ENABLE (РАЗРЕШИТЬ) | 1 КОМ | 2 КОМ |
Вариант INPUT (ВВОД) | 1 КОМ | 2 КОМ |
Вариант TERMINAL (С ТЕРМИНАЛА) | 2 КОМ | 2 КОМ |
Вариант I-O TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА) | - | 2 КОМ |
Вариант OUTPUT (ВЫВОД) | 1 КОМ | 2 КОМ |
Вариант KEY (КЛЮЧ) | 1 КОМ | 2 КОМ + |
Оператор ENTER (ВОЙТИ) | 1 ЯДР | 1 ЯДР + |
Оператор EVALUATE (ОЦЕНИТЬ) | - | 2 ЯДР |
Идентификатор/литерал | - | 2 ЯДР |
Арифметическое выражение | - | 2 ЯДР |
Условное выражение | - | 2 ЯДР |
TRUE/FALSE (ИСТИНА/ЛОЖЬ) | - | 2 ЯДР |
Вариант ALSO (ТАКЖЕ) | - | 2 ЯДР |
Вариант WHEN (КОГДА) | - | 2 ЯДР |
Вариант ALSO (ТАКЖЕ) | - | 2 ЯДР |
Вариант WHEN OTHER (ИНАЧЕ) | - | 2 ЯДР |
Вариант END-EVALUATE (КОНЕЦ-ОЦЕНИТЬ) | - | 2 ЯДР |
Оператор EXIT (ВЫЙТИ) | 1 ЯДР | 1 ЯДР |
Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) | 1 МПС | 1 МПС |
Оператор GENERATE (ГЕНЕРИРОВАТЬ) | 1 ГОТ | 1 ГОТ |
Имя-данного | 1 ГОТ | 1 ГОТ |
Имя-отчета | 1 ГОТ | 1 ГОТ |
Оператор GO TO (ПЕРЕЙТИ К) | 1 ЯДР | 1 ЯДР |
Имя-процедуры обязательно | 1 ЯДР | 1 ЯДР |
Имя-процедуры необязательно | 2 ЯДР | 2 ЯДР + |
Вариант DEPENDING ON (В ЗАВИСИМОСТИ ОТ) | 1 ЯДР | 1 ЯДР |
Оператор IF (ЕСЛИ) | 1 ЯДР | 1 ЯДР |
Только повелительные операторы | 1 ЯДР | 1 ЯДР |
Повелительные и (или) условные операторы | 2 ЯДР | 2 ЯДР |
Вложенные операторы IF (ЕСЛИ) | 2 ЯДР | 1 ЯДР |
Необязательное слово THEN (TO) | - | 1 ЯДР |
Вариант NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ) | 1 ЯДР | 1 ЯДР |
Вариант ELSE (ИНАЧЕ) | 1 ЯДР | 1 ЯДР |
Вариант END-IF (КОНЕЦ-ЕСЛИ) | - | 1 ЯДР |
Оператор INITIALIZE (ИНИЦИИРОВАТЬ) | - | 2 ЯДР |
Несколько идентификаторов | - | 2 ЯДР |
Вариант REPLACING (ЗАМЕНЯЯ) | - | 2 ЯДР |
Несколько REPLACING (ЗАМЕНЯЯ) | - | 2 ЯДР |
Оператор INITIATE (НАЧАТЬ) | 1 ГОТ | 1 ГОТ |
Оператор INSPECT (ПРОСМОТРЕТЬ) | 1 ЯДР | 1 ЯДР |
Только однолитерные данные | 1 ЯДР | 1 ЯДР |
Многолитерные данные | 2 ЯДР | 2 ЯДР |
Вариант TALLYING (СЧИТАЯ) | 1 ЯДР | 1 ЯДР |
Вариант BEFORE/AFTER (ДО/ПОСЛЕ) | 1 ЯДР | 1 ЯДР |
Несколько BEFORE/AFTER (ДО/ПОСЛЕ) | - | 1 ЯДР |
ALL/LEADING (ВСЕ/ВЕДУЩИЕ) несколько идентификаторов/литералов | - | 2 ЯДР |
Несколько фраз TALLYING (СЧИТАЯ) | 2 ЯДР | 2 ЯДР |
Вариант REPLACING (ЗАМЕНЯЯ) | 1 ЯДР | 1 ЯДР |
Вариант BEFORE/AFTER (ДО/ПОСЛЕ) | 1 ЯДР | 1 ЯДР |
Несколько фраз BEFORE/AFTER (ДО/ПОСЛЕ) | - | 2 ЯДР |
Несколько ALL/LEADING/FIRST (ВСЕ/ВЕДУЩИЕ/ПЕРВЫЙ) идентификатор/литерал | 2 ЯДР | 2 ЯДР |
Несколько фраз REPLACING (ЗАМЕНЯЯ) | - | 2 ЯДР |
Варианты TALLYING (СЧИТАЯ) и REPLACING (ЗАМЕНЯЯ) | 1 ЯДР | 1 ЯДР |
Вариант CONVERTING (ПРЕВРАЩАЯ) | - | 2 ЯДР |
Оператор MERGE (СЛИТЬ) | 2 СРТ | 1 СРТ |
Вариант ASCENDING/DESCENDING KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) | 2 СРТ | 1 СРТ |
Вариант COLLATING SEQUENCE (АЛФАВИТ) | 2 СРТ | 1 СРТ |
Вариант USING (ИСПОЛЬЗУЯ) | 2 СРТ | 1 СРТ |
Вариант OUTPUT PROCEDURE (ПРОЦЕДУРА ВЫВОДА) | 2 СРТ | 1 СРТ |
Имя-секции | 2 СРТ | - |
Имя-процедуры | - | 1 СРТ |
Вариант GIVING (ПОЛУЧАЯ) | 2 СРТ | 1 СРТ |
Несколько фраз GIVING (ПОЛУЧАЯ) | - | 1 СРТ |
Файл в вариантах USING/GIVING (ИСПОЛЬЗУЯ/ПОЛУЧАЯ) должен быть последовательным файлом | 2 СРТ | - |
Файл в вариантах USING/GIVING (ИСПОЛЬЗУЯ/ПОЛУЧАЯ) может быть последовательным, относительным или индексным | - | 1 СРТ |
Оператор MOVE (ПОМЕСТИТЬ) | 1 ЯДР | 1 ЯДР |
ТО идентификатор (В идентификатор) | 1 ЯДР | 1 ЯДР |
ТО несколько идентификаторов (В несколько идентификаторов) | 1 ЯДР | 1 ЯДР |
Вариант CORRESPONDING (СООТВЕТСТВЕННО) | 2 ЯДР | 2 ЯДР |
Дередактирование числовых редактируемых данных | - | 2 ЯДР |
Оператор MULTIPLY (УМНОЖИТЬ) | 1 ЯДР | 1 ЯДР |
BY идентификатор (НА идентификатор) | 1 ЯДР | 1 ЯДР |
BY несколько идентификаторов (НА несколько идентификаторов) | 2 ЯДР | 1 ЯДР |
GIVING идентификатор (ПОЛУЧАЯ идентификатор) | 1 ЯДР | 1 ЯДР |
GIVING несколько идентификаторов (ПОЛУЧАЯ несколько идентификаторов) | 2 ЯДР | 1 ЯДР |
Вариант ROUNDED (ОКРУГЛЯЯ) | 1 ЯДР | 1 ЯДР |
Вариант ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) | 1 ЯДР | 1 ЯДР |
Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) | - | 1 ЯДР |
Вариант END-MULTIPLY (КОНЕЦ-УМНОЖИТЬ) | - | 1 ЯДР |
Оператор OPEN (ОТКРЫТЬ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Имя-файла | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Несколько имен-файлов | 2 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Вариант INPUT (ВХОДНОЙ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) | 2 ПОД | 2 ПОД |
Вариант REVERSED (PEBEPCHO) | 2 ПОД | 2 ПОД + |
Вариант OUTPUT (ВЫХОДНОЙ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Вариант WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) | 2 ПОД | 2 ПОД |
1 ГОТ | 1 ГОТ | |
Вариант I-O (ВХОДНОЙ-ВЫХОДНОЙ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант EXTEND (ДОПОЛНЯЕМЫЙ) | 2 ПОД | 2 ПОД |
2 ОТД | ||
2 ИПД | ||
1 ГОТ | ||
Несколько INPUT, OUTPUT, I-O (ВХОДНОЙ, ВЫХОДНОЙ, ВХОДНОЙ-ВЫХОДНОЙ) | 1 ОТД | 1 ОТД |
1 ИПД | 1 ИПД | |
1 ПОД | ||
Несколько EXTEND (ДОПОЛНЯЕМЫЙ) | 2 ПОД | 2 ПОД |
2 ОТД | ||
2 ИПД | ||
Оператор PERFORM (ВЫПОЛНИТЬ) | 1 ЯДР | 1 ЯДР |
Имя-процедуры обязательно | 1 ЯДР | - |
Имя-процедуры необязательно | - | 1 ЯДР |
Вариант THROUGH имя-процедуры (ПО имя-процедуры) | 1 ЯДР | 1 ЯДР |
Вариант повелительного-оператора | - | 1 ЯДР |
Вариант END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ) | - | 1 ЯДР |
Вариант TIMES (РАЗ) | 1 ЯДР | 1 ЯДР |
Вариант UNTIL (ДО) | 2 ЯДР | 1 ЯДР |
Вариант TEST BEFORE/AFTER (С ПРОВЕРКОЙ В НАЧАЛЕ/В КОНЦЕ) | - | 2 ЯДР |
Вариант VARYING (МЕНЯЯ) | 2 ЯДР | 2 ЯДР |
Вариант TEST BEFORE/AFTER (С ПРОВЕРКОЙ В НАЧАЛЕ/В КОНЦЕ) | - | 2 ЯДР |
Вариант AFTER (ЗАТЕМ) | 2 ЯДР | 2 ЯДР |
Максимум два AFTER (ЗАТЕМ) | 2 ЯДР | - |
Разрешено по крайней мере AFTER (ЗАТЕМ) | - | 2 ЯДР |
Идентификатор-2 увеличивается до установки идентификатора-5 | - | 2 ЯДР |
Идентификатор-5 устанавливается до увеличения идентификатора-2 | 2 ЯДР | - |
Оператор PURGE (ОЧИСТИТЬ) | - | 2 КОМ |
Оператор READ (ЧИТАТЬ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант NEXT (СЛЕДУЮЩУЮ) | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
2 ПОД | ||
Вариант INTO (В) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант AT END (В КОНЦЕ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант NOT AT END (HE В КОНЦЕ) | - | 1 ПОД |
1 ОТД | ||
1 ИПД | ||
Вариант KEY (КЛЮЧ) | 2 ИПД | 2 ИПД |
Вариант INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) | 1 ОТД | 1 ОТД |
1 ИПД | 1 ИПД | |
Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) | - | 1 ОТД |
1 ИПД | ||
Вариант END-READ (КОНЕЦ-ЧИТАТЬ) | - | 1 ПОД |
1 ОТД | ||
1 ИПД | ||
Оператор RECEIVE (ПОЛУЧИТЬ) | 1 КОМ | 1 КОМ |
Вариант MESSAGE (СООБЩЕНИЕ) | 1 КОМ | 1 КОМ |
Вариант SEGMENT (СЕГМЕНТ) | 2 КОМ | 2 КОМ |
1 КОМ | 1 КОМ | |
Вариант INTO (В) | 1 КОМ | 1 КОМ |
Вариант NO DATA (НЕТ ДАННЫХ) | 1 КОМ | 1 КОМ |
Вариант WITH DATA (ЕСТЬ ДАННЫЕ) | - | 1 КОМ |
Вариант END-RECEIVE (КОНЕЦ-ПОЛУЧИТЬ) | - | 1 КОМ |
Оператор RELEASE (ПЕРЕДАТЬ) | 1 СРТ | 1 СРТ |
Вариант FROM (ИЗ ПОЛЯ) | 1 СРТ | 1 СРТ |
Оператор RETURN (ВЕРНУТЬ) | 1 СРТ | 1 СРТ |
Вариант INTO (В) | 1 СРТ | 1 СРТ |
Вариант AT END (В КОНЦЕ) | 1 СРТ | 1 СРТ |
Вариант NOT AT END (HE В КОНЦЕ) | - | 1 СРТ |
Вариант END-RETURN (КОНЕЦ-ВЕРНУТЬ) | - | 1 СРТ |
Оператор REWRITE (ОБНОВИТЬ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант FROM (ИЗ ПОЛЯ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) | 1 ОТД | 1 ОТД |
1 ИПД | 1 ИПД | |
Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) | - | 1 ОТД |
1 ИПД | ||
Вариант END-REWRITE (КОНЕЦ-ОБНОВИТЬ) | - | 1 ОТД |
1 ИПД | ||
Оператор SEARCH (ИСКАТЬ) | 2 ТАБ | 2 ЯДР |
Вариант VARYING (МЕНЯЯ) | 2 ТАБ | 2 ЯДР |
Вариант AT END (В КОНЦЕ) | 2 ТАБ | 2 ЯДР |
Вариант WHEN (КОГДА) | 2 ТАБ | 2 ЯДР |
Несколько WHEN (КОГДА) | 2 ТАБ | 2 ЯДР |
Вариант END-SEARCH (КОНЕЦ-ИСКАТЬ) | - | 2 ЯДР |
Оператор SEARCH ALL (ИСКАТЬ ОСОБО) | 2 ТАБ | 2 ЯДР |
Вариант AT END (В КОНЦЕ) | 2 ТАБ | 2 ЯДР |
Вариант WHEN (КОГДА) | 2 ТАБ | 2 ЯДР |
Вариант END-SEARCH (КОНЕЦ-ИСКАТЬ) | - | 2 ЯДР |
Оператор SEND (ПОСЛАТЬ) | 1 КОМ | 1 КОМ |
Вариант FROM идентификатор (ИЗ ПОЛЯ идентификатор) (часть сообщения) | 2 КОМ | 2 КОМ |
Вариант FROM идентификатор (ИЗ ПОЛЯ идентификатор) (полное сообщение) | 1 КОМ | 1 КОМ |
Вариант WITH идентификатор (С идентификатор) | 2 КОМ | 2 КОМ |
Вариант WITH ESI (С ИКС) | 2 КОМ | 2 КОМ |
Вариант WITH EMI (С ИКЩ) | 1 КОМ | 1 КОМ |
Вариант WITH EGI (С ИКГ) | 1 КОМ | 1 КОМ |
Вариант BEFORE/AFTER ADVANCING (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ) | 1 КОМ | 1 КОМ |
Целое LINE/LINES (целое СТРОК) | 1 КОМ | 1 КОМ |
Идентификатор LINE/LINES (идентификатор СТРОК) | 1 КОМ | 1 КОМ |
Мнемоническое-имя | 1 КОМ | 2 КОМ |
PAGE (СТРАНИЦЫ) | 1 КОМ | 1 КОМ |
Вариант REPLACING LINE (ЗАМЕНЯЯ СТРОКУ) | - | 2 КОМ |
Оператор SET (УСТАНОВИТЬ) | 1 ТАБ | 1 ЯДР |
Имя-индекса/идентификатор ТО (НА) | 1 ТАБ | 1 ЯДР |
Имя-индекса UP BY/DOWN BY (имя-индекса ПРИБАВЛЯЯ/ВЫЧИТАЯ) | 1 ТАБ | 1 ЯДР |
Мнемоническое имя ТО ON/OFF (мнемоническое имя НА ВКЛЮЧЕНО/ВЫКЛЮЧЕНО) | - | 1 ЯДР |
Имя-условия ТО TRUE (НА ИСТИНА) | - | 2 ЯДР |
Оператор SORT (СОРТИРОВАТЬ) | 1 СРТ | 1 СРТ |
Вариант ASCENDING/DESCENDING KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) | 1 СРТ | 1 СРТ |
Вариант DUPLICATES (С ДУБЛИРОВАНИЕМ) | - | 1 СРТ |
Вариант COLLATING SEQUENCE (АЛФАВИТ) | 2 СРТ | 1 СРТ |
Вариант INPUT PROCEDURE (ПРОЦЕДУРА ВВОДА) | 1 СРТ | 1 СРТ |
Имя-секции | 1 СРТ | - |
Имя-процедуры | - | 1 СРТ |
Вариант USING (ИСПОЛЬЗУЯ) | 1 СРТ | 1 СРТ |
Несколько имен-файлов | 2 СРТ | 1 СРТ |
Вариант OUTPUT PROCEDURE (ПРОЦЕДУРА-ВЫВОДА) | 1 СРТ | 1 СРТ |
Имя-секции | 1 СРТ | - |
Имя-процедуры | - | 1 СРТ |
Вариант GIVING (ПОЛУЧАЯ) | 1 СРТ | 1 СРТ |
Несколько имен-файлов | - | 1 СРТ |
Оператор START (ПОДВЕСТИ) | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
Вариант KEY (КЛЮЧ) | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
EQUAL TO (РАВНО) | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
= | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
GREATER THAN (БОЛЬШЕ) | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
> | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
NOT LESS THAN (HE МЕНЬШЕ) | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
HE < | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
GREATER THAN OR EQUAL TO (БОЛЬШЕ ИЛИ РАВНО) | - | 2 ОТД |
2 ИПД | ||
> = | - | 2 ОТД |
2 ИПД | ||
Вариант INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) | 2 ОТД | 2 ОТД |
2 ИПД | 2 ИПД | |
Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) | - | 2 ОТД |
2 ИПД | ||
Вариант END-START (КОНЕЦ-ПОДВЕСТИ) | - | 2 ОТД |
2 ИПД | ||
Оператор STOP (ОСТАНОВИТЬ) | 1 ЯДР | 1 ЯДР |
RUN (РАБОТУ) | 1 ЯДР | 1 ЯДР |
Литерал | 1 ЯДР | 1 ЯДР + |
Оператор STRING (СОБРАТЬ) | 2 ЯДР | 2 ЯДР |
Несколько DELIMITED BY (ОГРАНИЧИВАЯСЬ) | 2 ЯДР | 2 ЯДР |
Вариант WITH POINTER (УКАЗАТЕЛЬ) | 2 ЯДР | 2 ЯДР |
Вариант ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) | 2 ЯДР | 2 ЯДР |
Вариант NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) | - | 2 ЯДР |
Вариант END-STRING (КОНЕЦ-СОБРАТЬ) | - | 2 ЯДР |
Оператор SUBTRACT (ОТНЯТЬ) | 1 ЯДР | 1 ЯДР |
Идентификатор/литерал | 1 ЯДР | 1 ЯДР |
Несколько идентификаторов/литералов | 1 ЯДР | 1 ЯДР |
FROM идентификатор (ОТ идентификатор) | 1 ЯДР | 1 ЯДР |
FROM несколько идентификаторов (ОТ несколько идентификаторов) | 2 ЯДР | 1 ЯДР |
GIVING идентификатор (ПОЛУЧАЯ идентификатор) | 1 ЯДР | 1 ЯДР |
GIVING несколько идентификаторов (ПОЛУЧАЯ несколько идентификаторов) | 2 ЯДР | 1 ЯДР |
Вариант ROUNDED (ОКРУГЛЯЯ) | 1 ЯДР | 1 ЯДР |
Вариант ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) | 1 ЯДР | 1 ЯДР |
Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) | - | 1 ЯДР |
Вариант END-SUBTRACT (КОНЕЦ-ОТНЯТЬ) | - | 1 ЯДР |
Вариант CORRESPONDING (СООТВЕТСТВЕННО) | 2 ЯДР | 2 ЯДР |
Оператор SUPPRESS (ПОДАВИТЬ) | 1 ГОТ | 1 ГОТ |
Оператор TERMINATE (ЗАКОНЧИТЬ) | 2 ЯДР | 2 ЯДР |
Оператор UNSTRING (РАЗОБРАТЬ) | 2 ЯДР | 2 ЯДР |
Вариант DELIMITED BY (ОГРАНИЧИВАЯСЬ) | 2 ЯДР | 2 ЯДР |
Вариант DELIMITER IN (ОГРАНИЧИТЕЛЬ В) | 2 ЯДР | 2 ЯДР |
Вариант COUNT IN (СЧЕТ В) | 2 ЯДР | 2 ЯДР |
Вариант WITH POINTER (УКАЗАТЕЛЬ) | 2 ЯДР | 2 ЯДР |
Вариант TALLYING (СЧИТАЯ) | 2 ЯДР | 2 ЯДР |
Вариант ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) | 2 ЯДР | 2 ЯДР |
Вариант NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) | - | 2 ЯДР |
Вариант END-UNSTRING (КОНЕЦ-РАЗОБРАТЬ) | - | 2 ЯДР |
Оператор USE (ИСПОЛЬЗОВАТЬ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
1 ОТЛ | 1 ОТЛ + | |
Вариант EXCEPTION/ERROR PROCEDURE (ПРОЦЕДУРЫ ОШИБКИ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Вариант GLOBAL (ГЛОБАЛЬНО) | - | 2 МПС |
Вариант ON имя-файла (ДЛЯ имя-файла) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
Вариант ON несколько имен-файлов (ДЛЯ несколько имен-файлов) | 2 ПОД | 2 ПОД |
2 ОТД | 2 ОТД | |
2 ИПД | 2 ИПД | |
1 ГОТ | 1 ГОТ | |
ON INPUT (ДЛЯ ВХОДНЫХ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
ON OUTPUT (ДЛЯ ВЫХОДНЫХ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
1 ГОТ | 1 ГОТ | |
ON I-O (ДЛЯ ВХОДНЫХ-ВЫХОДНЫХ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
ON EXTEND (ДЛЯ ДОПОЛНЯЕМЫХ) | 2 ПОД | 2 ПОД |
2 ОТД | ||
2 ИПД | ||
1 ГОТ | ||
Вариант BEFORE REPORTING (ДО ВЫДАЧИ) | 1 ГОТ | 1 ГОТ |
Вариант GLOBAL (ГЛОБАЛЬНО) | - | 2 МПС |
Вариант FOR DEBUGGING (ДЛЯ ОТЛАДКИ) | 1 ОТЛ | 1 ОТЛ + |
Имя-процедуры | 1 ОТЛ | 1 ОТЛ + |
ALL PROCEDURES (ВСЕХ ПРОЦЕДУРАХ) | 1 ОТЛ | 1 ОТЛ + |
ALL REFERENCES OF идентификатор-1 | ||
(ВСЕХ ССЫЛКАХ НА идентификатор-1) | 2 ОТЛ | 2 ОТЛ + |
Имя-коммуникации | 2 ОТЛ | 2 ОТЛ + |
Имя-файла | 2 ОТЛ | 2 ОТЛ + |
Оператор WRITE (ПИСАТЬ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант FROM (ИЗ ПОЛЯ) | 1 ПОД | 1 ПОД |
1 ОТД | 1 ОТД | |
1 ИПД | 1 ИПД | |
Вариант BEFORE/AFTER ADVANCING (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ) | 1 ПОД | 1 ПОД |
Целое LINE/LINES (СТРОК) | 1 ПОД | 1 ПОД |
Идентификатор LINE/LINES (СТРОК) | 2 ПОД | 1 ПОД |
Мнемоническое-имя | 2 ПОД | 2 ПОД |
PAGE (СТРАНИЦЫ) | 1 ПОД | 1 ПОД |
Вариант AT END-OF-PAGE/EOP (В КОНЦЕ СТРАНИЦЫ) | 2 ПОД | 2 ПОД |
Вариант NOT AT END-OF-PAGE/EOP (HE В КОНЦЕ СТРАНИЦЫ) | - | 2 ПОД |
Вариант INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) | 1 ОТД | 1 ОТД |
1 ИПД | 1 ИПД | |
Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) | - | 1 ОТД |
1 ИПД | ||
Вариант END-WRITE (КОНЕЦ-ПИСАТЬ) | - | 2 ПОД |
1 ОТД | ||
1 ИПД | ||
1.6. Дополнительный список отличий | ||
СЕГМЕНТАЦИЯ | ||
Номер-сегментов от 0 до 49 для постоянных сегментов | 1 СЕГ | 1 СЕГ + |
Номера-сегментов от 50 до 99 для независимых сегментов | 1 СЕГ | 1 СЕГ + |
Все секции с одинаковыми номерами сегментов должны быть записаны подряд в исходной программе | 1 СЕГ | 1 СЕГ + |
Секции с одинаковыми номерами-сегментов не обязательно должны физически следовать одна за другой в исходной программе | 2 СЕГ | 2 СЕГ + |
ОБРАБОТКА ИСХОДНЫХ ТЕКСТОВ | ||
Оператор COPY (КОПИРОВАТЬ) | 1 БИБ | 1 ОИТ |
Вариант OF/IN имя-библиотеки (ИЗ имя библиотеки) | 2 БИБ | 2 ОИТ |
Вариант REPLACING (ЗАМЕНЯЯ) | 2 БИБ | 2 ОИТ |
Псевдотекст | 2 БИБ | 2 ОИТ |
Идентификатор | 2 БИБ | 2 ОИТ |
Литерал | 2 БИБ | 2 ОИТ |
Слово | 2 БИБ | 2 ОИТ |
Оператор REPLACE (ЗАМЕНИТЬ) | - | 2 ОИТ |
Псевдотекст BY псевдотекст (псевдотекст НА псевдотекст) | - | 2 ОИТ |
OFF (ОТКЛЮЧИТЬ ЗАМЕНИТЬ) | - | 2 ОИТ |
2. СУЩЕСТВЕННЫЕ ИЗМЕНЕНИЯ
2.1. Существенные изменения, не влияющие на имеющиеся программы
Приведенный ниже список изменений расширяет средства ГОСТ 22558. Эти изменения являются новыми средствами, не влияющими на имеющиеся программы, например, новые глаголы или дополнительные возможности для старого глагола.
(1) Строчные буквы (1 ЯДР). Если набор литер ЭВМ включает строчные буквы, их можно использовать в строке-литер. Каждая такая литера эквивалентна прописной литере, за исключением случая, когда строчные буквы используются в нечисловом литерале.
(2) Двоеточие (:) (2 ЯДР). Набор литер Кобола расширен включением двоеточия, которое используется при модификации ссылок.
(3) Литеры пунктуации (1 ЯДР). Разделители запятая, точка с запятой и пробел взаимозаменяемы в исходной программе.
(4) Слова, определенные пользователем, и системные имена (1 ЯДР). Одно и то же слово Кобола в исходной программе можно использовать и как системное имя и как слово, определенное пользователем; чем является данное слово - определяется по контексту.
(5) Символические литеры (2 ЯДР). Символическая литера является определенным пользователем словом, определяющим стандартную константу.
(6) Нечисловой литерал (1 ЯДР). Верхняя граница длины нечислового литерала 160 литер.
В предыдущем стандарте Кобола верхняя граница была 120 литер.
(7) Стандартная константа ZERO (НУЛЬ) (2 ЯДР). Стандартная константа ZERO (НУЛЬ) допустима в арифметических выражениях.
(8) Единственность ссылки (1 ЯДР). Определенное пользователем слово не обязательно должно быть уникальным или иметь возможность быть уточненным, если на него не ссылаются.
(9) Уточнения (2 ЯДР). Реализация должна обеспечивать возможность обработки 50 уровней уточнения. В предыдущем стандарте Кобола разрешалось 5 уровней уточнения.
(10) Индексирование (2 ЯДР). Верхняя граница размерности таблицы - семь.
(11) Относительное индексирование (1 ЯДР). Относительное индексирование допускает, чтобы за индексом следовал знак + или -, за которым следует целое.
(12) Использование индексов и индексных данных (1 ЯДР). И индексы, и индексные данные могут быть записаны одновременно в одном наборе индексов, используемом для ссылки на отдельное вхождение в многомерной таблице.
(13) Модификация ссылки (2 ЯДР). Модификация ссылки является новым методом ссылки на данное посредством указания самой левой литеры и длины данного.
(14) Порядковый номер (1 ЯДР). Порядковый номер может содержать любую литеру из набора литер машины. В ГОСТ 22558 порядковый номер мог содержать только цифры.
(15) Формат представления раздела данных (1 ЯДР). Слово, следующее за указателем уровня, номером уровня 01 или номером уровня 77 на одной и той же строке, может начинаться в поле А.
(16) Заголовок конца программы (2 ЯДР). Заголовок конца программы указывает конец названной исходной Кобол-программы; за заголовком конца программы может следовать Кобол-программа, которая должна компилироваться отдельно при одном и том же вызове компилятора.
(17) Вложенные исходные программы (2 МПС). Программы могут содержаться в других программах.
(18) Фраза INITIAL (НАЧАЛЬНАЯ) в параграфе PROGRAM-ID (ПРОГРАММА) (2 МПС). Фраза INITIAL (НАЧАЛЬНАЯ) определяет программу, состояние которой инициировано при каждом вызове программы в то же состояние, как если бы программа вызывалась впервые в единице исполнения.
(19) Фраза COMMON (ОБЩАЯ) в параграфе PROGRAM-ID (ПРОГРАММА) (2 МПС). Фраза COMMON (ОБЩАЯ) определяет программу, которая, хотя и содержится непосредственно в другой программе, может быть вызвана из любой программы, прямо или косвенно содержащейся в этой другой программе.
(20) Раздел оборудования (1 ЯДР). Раздел оборудования необязателен. В разделе оборудования секция конфигурации необязательна. Параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА), параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА), статьи в параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) и статьи в параграфе I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) также необязательны.
(21) Параграф SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ ИМЕНА) (1 ЯДР). Если имя-реализации есть переключатель, нет необходимости указывать имя-условия.
(22) Параграф SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) (1 ЯДР). Зарезервированное слово IS (ЕСТЬ) сделано необязательным в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) в соответствии с использованием слова IS (ЕСТЬ) в спецификациях Кобола.
(23) Вариант STANDARD-2 (СТАНДАРТ-М) (1 ЯДР). Вариант STANDARD-2 (СТАНДАРТ-М) фразы ALPHABET (АЛФАВИТ) параграфа SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) допускает спецификацию набора 7-битовых литер ISO для алфавита или основной последовательности.
(24) Фраза ASSIGN (НАЗНАЧИТЬ) (1 ПОД, 1 ОТД, 1 ИПД, 1 СРТ, 1 ГОТ). Во фразе ASSIGN (НАЗНАЧИТЬ) может быть указан нечисловой литерал.
(25) Фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) (2 ПОД, 2 ОТД, 2 ИПД). Фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) в статье управления файлом относится к последовательным файлам, относительным файлам и индексным файлам, открытым в режиме ввода, ввода-вывода или дополнения. В предыдущем стандарте Кобола фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) в статье управления файлом применялась к последовательным файлам, открытым в режиме ввода.
(26) Фраза ORGANIZATION (ОРГАНИЗАЦИЯ) (1 ПОД, 1 ОТД, 1 ИПД). Во фразе ORGANIZATION (ОРГАНИЗАЦИЯ) статьи управления файлом слова ORGANIZATION IS (ОРГАНИЗАЦИЯ) необязательны.
(27) Фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) (2 ПОД, 1 ГОТ). Фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) в статье управления файлом определяет литеру, которая должна быть использована для заполнения блока в последовательных файлах.
(28) Фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) (2 ПОД, 1 ГОТ). Фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) в статье управления файлом указывает способ определения длины записи переменной длины во внешней среде.
(29) Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) (1 ПОД, 1 ОТД, 1 ИПД, 1 ГОТ). В параграфе I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) порядок фраз несущественен.
(30) Раздел данных (1 ЯДР). Раздел данных необязателен.
(31) Фраза BLOCK CONTAINS (В БЛОКЕ) (1 ПОД, 1 ОТД, 1 ИПД). Отсутствие фразы BLOCK CONTAINS (В БЛОКЕ) разрешается, если число записей, содержащихся в блоке, указывается операционным окружением. В предыдущем стандарте Кобола отсутствие фразы BLOCK CONTAINS (В БЛОКЕ) обозначало стандартный размер физической записи, определяемый реализацией.
(32) Фраза CODE-SET (АЛФАВИТ) (1 ПОД, 1 ГОТ). Фраза CODESET (АЛФАВИТ) может быть указана для всех файлов с последовательной организацией. В предыдущем стандарте Кобола была ограничена для файлов не массовой памяти.
(33) Фраза LABEL RECORDS (МЕТКИ) (1 ПОД, 1 ОТД, 1 ИПД, 1 ГОТ). Фраза LABEL RECORDS (МЕТКИ) необязательна; если она не указана, подразумевается фраза LABEL RECORDS ARE STANDARD (МЕТКИ СТАНДАРТНЫ).
(34) Фраза LINAGE (ВЕРСТКА) (2 ПОД). Имена-данных во фразе LINAGE (ВЕРСТКА) могут быть уточнены.
(35) Фраза EXTERNAL (ВНЕШНЕЕ) (2 МПС). Фраза EXTERNAL (ВНЕШНЕЕ) указывает, что данное или определитель файла внешние и могут быть доступны и обработаны в любой программе единицы исполнения.
(36) Фраза GLOBAL (ГЛОБАЛЬНОЕ) (2 МПС). Фраза GLOBAL (ГЛОБАЛЬНОЕ) указывает, что имя-данного или имя-файла является глобальным именем и доступно любой программе, содержащейся в программе, объявляющей это имя.
(37) Фраза FILLER (ЗАПОЛНИТЕЛЬ) (1 ЯДР). Использование слова FILLER (ЗАПОЛНИТЕЛЬ) необязательно для статей описания данных. Слово FILLER (ЗАПОЛНИТЕЛЬ) может появиться в статье описания данного, содержащей фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ). Слово FILLER (ЗАПОЛНИТЕЛЬ) может быть использовано в статье описания данного или группы данных.
(38) Фраза OCCURS (ПОВТОРЯЕТСЯ) (2 ЯДР). Данное, указанное в фразе DEPENDING ON (В ЗАВИСИМОСТИ ОТ), может иметь нулевое значение. Таким образом, минимальное число вхождений может равняться нулю.
(39) Строка-литер шаблона (2 ЯДР, 1 ГОТ). Строка литер шаблона может быть продолжена на следующих строках кодирования.
(40) Фраза PICTURE (ШАБЛОН) (1 ЯДР). Литера вставки "." (точка) или "," (запятая) может быть использована как последняя литера строки-литер шаблона, если за ней непосредственно следует разделитель точка, заканчивающая статью описания данного.
(41) Фраза RECORD (В ЗАПИСИ) (2 ПОД, 2 ОТД, 2 ИПД, 1 СРТ). Вариант VARYING (ПЕРЕМЕННОЕ ЧИСЛО) в фразе RECORD (В ЗАПИСИ) используется для указания записей переменной длины. Слова DEPENDING ON (В ЗАВИСИМОСТИ ОТ), связанные с вариантом VARYING (ПЕРЕМЕННОЕ ЧИСЛО), определяют данное, содержащее число позиций литер в записи.
(42) Фраза REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) (1 ЯДР). Размер данного, связанного с фразой REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ), может быть меньше или равен размеру переопределяемого данного. В ГОСТ 22558 оба данных должны были иметь одинаковое число позиций литер.
(43) Фраза SIGN (ЗНАК) (1 ЯДР). В иерархии статьи описания данных может быть указано несколько фраз SIGN (ЗНАК); спецификация на подчиненном уровне имеет приоритет над спецификацией уровня содержащей группы.
(44) Фраза SIGN (ЗНАК) (1 ГОТ). Фраза SIGN (ЗНАК) разрешена в статье описания группы отчета.
(45) Фраза USAGE (фраза об использовании) (1 ЯДР). Во фразе об использовании введены два новых варианта BINARY (ДВОИЧНОЕ) и PACKED-DECIMAL (ДЕСЯТИЧНОЕ)
(46) Фраза VALUE (ЗНАЧЕНИЕ) (1 ЯДР). Фраза VALUE (ЗНАЧЕНИЕ) может быть указана в статье описания данного, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ). Фраза VALUE (ЗНАЧЕНИЕ) может быть указана в статье описания данного, подчиненной статье, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ). В ГОСТ 22558 фраза VALUE (ЗНАЧЕНИЕ) не разрешалась в статье описания данного, содержащей фразу OCCURS, или в статье описания данного, подчиненной статье, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ).
(47) Статья описания коммуникации (1 КОМ). Порядок фраз в статье описания коммуникации несущественен.
(48) Вариант FOR I-O (ДЛЯ ВВОДА-ВЫВОДА) в статье описания коммуникации (1 КОМ). Вариант FOR I-O (ДЛЯ ВВОДА-ВЫВОДА) в статье описания коммуникации обеспечивает функции ввода и вывода одной статьей ОК.
(49) Фраза LINE NUMBER (НОМЕР СТРОКИ) (1 ГОТ). В качестве относительного номера строки в варианте PLUS (ПЛЮС) фразы LINE NUMBER (НОМЕР СТРОКИ) может быть указано целое 0.
(50) Раздел процедур (1 ЯДР). Раздел процедур не обязателен.
(51) Заголовок раздела процедур (1 МПС). На данное секции связи, которое переопределяет или подчинено переопределяющему данному, и на данное, появляющееся в заголовке раздела процедур, можно ссылаться в разделе процедур.
(52) Ограничители области действия (1 ЯДР, 1 ПОД, 1 ОТД, 1 ИПД, 2МПС, 1 СРТ, 1 КОМ). Ограничители области действия служат для указания границы действия определенных процедурных операторов. Ограничители области действия следующие: END-ADD (КОНЕЦ-СЛОЖИТЬ), END-CALL (КОНЕЦ-ВЫЗВАТЬ), END-COMPUTE (КОНЕЦ-ВЫЧИСЛИТЬ), END-DELETE (КОНЕЦ-УДАЛИТЬ), END-DIVIDE (КОНЕЦ-РАЗДЕЛИТЬ), END-EVALUATE (КОНЕЦ-ОЦЕНИТЬ), END-IF (КОНЕЦ-ЕСЛИ), END-MULTIPLY (КОНЕЦ-УМНОЖИТЬ), END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ), END-READ (КОНЕЦ-ЧИТАТЬ), END-RECEIVE (КОНЕЦ-ПОЛУЧИТЬ), END-RETURN (КОНЕЦ-ВЕРНУТЬ), END-REWRITE (КОНЕЦ-ОБНОВИТЬ), END-SEARCH (КОНЕЦ-ИСКАТЬ), END-START (КОНЕЦ-ПОДВЕСТИ), END-STRING (КОНЕЦ-СОБРАТЬ), END-SUBTRACT (КОНЕЦ-ОТНЯТЬ), END-UNSTRING (КОНЕЦ-РАЗОБРАТЬ), END-WRITE (КОНЕЦ-ПИСАТЬ).
(53) Знаки операций отношения (1 ЯДР). Знак операции отношения IS GREATER THAN OR EQUAL TO (> = ) эквивалентен знаку операции отношения IS NOT LESS THAN (HE МЕНЬШЕ). Знак операции отношения IS LESS THAN OR EQUAL TO (МЕНЬШЕ ИЛИ РАВНО) эквивалентен знаку операции отношения IS NOT GREATER THAN (HE БОЛЬШЕ).
(54) Условие класса (1 ЯДР). Имя-класса связано с набором литер, определенным пользователем во фразе CLASS (КЛАСС) в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА).
(55) Вариант DAY-OF-WEEK (ДЕНЬ-НЕДЕЛИ) оператора ACCEPT (ПРИНЯТЬ) (2 ЯДР). Вариант DAY-OF-WEEK (ДЕНЬ-НЕДЕЛИ) оператора ACCEPT (ПРИНЯТЬ) обеспечивает доступ к целому, представляющему день недели; например, 1 представляет понедельник, 2 - вторник, и 7 - воскресенье.
(56) Оператор ADD (СЛОЖИТЬ) (1 ЯДР). Слово ТО (С) является необязательным словом в формате:
ADD идентификатор/литерал ТО идентификатор-литерал GIVING идентификатор
СЛОЖИТЬ идентификатор/литерал С идентификатор-литерал ПОЛУЧАЯ идентификатор.
(57) Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) оператора ADD (СЛОЖИТЬ) (1 ЯДР). Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) предоставляет программисту возможность указывать процедуры, которые должны быть выполнены, когда не выполняется условие переполнения для оператора ADD (СЛОЖИТЬ).
(58) Оператор CALL (ВЫЗВАТЬ) (2 МПС). Вариант BY CONTENT (ЗНАЧЕНИЕ) указывает, что вызываемая программа не может изменять значение параметра фразы USING (ИСПОЛЬЗУЯ) в операторе CALL (ВЫЗВАТЬ), но вызываемая программа может изменять значение соответствующего данного в заголовке раздела процедур программы. Вариант BY REFERENCE (ССЫЛКУ) означает, что параметр фразы USING (ИСПОЛЬЗУЯ) оператора CALL (ВЫЗВАТЬ) должен рассматриваться также, как и параметр в ГОСТ 22558.
(59) Оператор CALL (ВЫЗВАТЬ) (1 МПС). Параметры, передаваемые в операторе CALL (ВЫЗВАТЬ), могут быть данными, имеющими уровни, отличные от 01 или 77. Параметры, передаваемые в операторе CALL (ВЫЗВАТЬ), могут быть индексированы или указываться модификацией ссылки.
(60) Варианты ON EXCEPTION (ПРИ ОШИБКЕ) и NOT ON EXCEPTION (БЕЗ ОШИБКИ) оператора CALL (ВЫЗВАТЬ) (2 МПС). Вариант ON EXCEPTION (ПРИ ОШИБКЕ) оператора CALL (ВЫЗВАТЬ) эквивалентен варианту ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) оператора CALL (ВЫЗВАТЬ). Вариант NOT ON EXCEPTION (БЕЗ ОШИБКИ) обеспечивает программисту возможность указать процедуры, которые должны выполняться, когда программа, указанная в операторе CALL (ВЫЗВАТЬ), может быть доступна для выполнения.
(61) Вариант REEL/UNIT (КАТУШКУ/ТОМ) оператора CLOSE (ЗАКРЫТЬ) (1 ПОД, 1 ГОТ). Вариант REEL/UNIT (КАТУШКУ/ТОМ) оператора CLOSE (ЗАКРЫТЬ) может относиться к файлам на одной катушке (томе) и разрешена в данном стандарте для файла отчетов.
(62) Вариант FOR REMOVAL (С УДАЛЕНИЕМ) оператора CLOSE (ЗАКРЫТЬ) (2 ПОД, 1 ГОТ). Вариант FOR REMOVAL (С УДАЛЕНИЕМ) оператора CLOSE (ЗАКРЫТЬ) разрешается для последовательного файла на одной катушке/томе.
(63) Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) оператора COMPUTE (ВЫЧИСЛИТЬ) (2 ЯДР). Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) оператора COMPUTE (ВЫЧИСЛИТЬ) предоставляет программисту возможность указывать процедуры, которые должны быть выполнены, когда для оператора COMPUTE (ВЫЧИСЛИТЬ) не выполняется условие переполнения.
(64) Оператор CONTINUE (ПРОДОЛЖИТЬ) (1 ЯДР). Оператор CONTINUE (ПРОДОЛЖИТЬ) указывает, что нет в наличии выполнимого оператора, и приводит к неявной передаче управления следующему выполнимому оператору.
(65) Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) оператора DELETE (УДАЛИТЬ) (1 ОТД, 1 ИПД). Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) оператора DELETE (УДАЛИТЬ) предоставляет программисту возможность указать процедуры, которые должны быть выполнены, когда для оператора DELETE (УДАЛИТЬ) не выполняется условие ошибки ключа.
(66) Оператор DISPLAY (ВЫДАТЬ) (1 ЯДР). Для оператора DISPLAY (ВЫДАТЬ) разрешена стандартная константа ALL литерал (ВСЕ литерал).
В ГОСТ 22558 стандартная константа ALL литерал (ВСЕ литерал) не разрешалась в операторе DISPLAY (ВЫДАТЬ).
(67) Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) оператора DIVIDE (РАЗДЕЛИТЬ) (1 ЯДР). Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) оператора DIVIDE (РАЗДЕЛИТЬ) обеспечивает программисту возможность указывать процедуры, которые должны быть выполнены, когда для оператора DIVIDE (РАЗДЕЛИТЬ) не выполняется условие переполнения.
(68) Вариант WITH NO ADVANCING (БЕЗ ПРОДВИЖЕНИЯ) оператора DISPLAY (ВЫДАТЬ) (2 ЯДР). Вариант WITH NO ADVANCING (БЕЗ ПРОДВИЖЕНИЯ) оператора DISPLAY (ВЫДАТЬ) обеспечивает программисту возможность взаимодействия с устройством, обладающим вертикальным позиционированием.
(69) Оператор EVALUATE (ОЦЕНИТЬ) (2 ЯДР). Оператор EVALUATE (ОЦЕНИТЬ) описывает многоветвящуюся, многосвязную структуру, в которой оценивается несколько условий для определения последующих действий объектной программы.
(70) Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) (1 МПС). Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) не обязательно должен быть единственным оператором в параграфе.
(71) Оператор GO TO DEPENDING ON (ПЕРЕЙТИ В ЗАВИСИМОСТИ).....* ЯДР). Число имен-процедур, требуемых в операторе GO TO DEPENDING (ПЕРЕЙТИ В ЗАВИСИМОСТИ), снижено до единицы.
________________
* Брак оригинала. - .
(72) Оператор IF (ЕСЛИ) (1 ЯДР). Необязательное слово THEN (ТО) добавлено в общий формат оператора IF (ЕСЛИ).
(73) Оператор INITIALIZE (ИНИЦИИРОВАТЬ) (2 ЯДР). Оператор INITIALIZE (ИНИЦИИРОВАТЬ) обеспечивает возможность устанавливать выбранные типы полей данных в предопределенные значения.
(74) Оператор INSPECT (ПРОСМОТРЕТЬ) (2 ЯДР). Многократные повторения варианта BEFORE/AFTER (ДО/ПОСЛЕ) позволяют начать операцию подсчета/замены после того, как начался просмотр начал данных, и/или закончить до конца просмотра концов данных.
(75) Оператор INSPECT (ПРОСМОТРЕТЬ) (2 ЯДР). Слова ALL/LEADING (ВСЕ/ВЕДУЩИЕ) могут быть размещены среди многих идентификаторов/литералов и возможны многократные повторения варианта REPLACING CHARACTERS (ЗАМЕНЯЯ ЛИТЕРЫ).
(76) Оператор INSPECT CONVERTING (ПРОСМОТРЕТЬ ПРЕВРАЩАЯ) (2 ЯДР). Вариант CONVERTING (ПРЕВРАЩАЯ) обеспечивает новую разновидность оператора INSPECT (ПРОСМОТРЕТЬ).
(77) Оператор MERGE (СЛИТЬ) (1 СРТ). В варианте GIVING (ПОЛУЧАЯ) оператора MERGE (СЛИТЬ) разрешается несколько имен-файлов. Файлы, указанные в операторе MERGE (СЛИТЬ), могут содержать записи переменной длины. Файл, указанный в варианте USING (ИСПОЛЬЗУЯ) или GIVING (ПОЛУЧАЯ) оператора MERGE (СЛИТЬ), может быть относительным или индексным файлом.
(78) Оператор MOVE (ПОМЕСТИТЬ) (2 ЯДР). Числовое редактируемое данное может быть помещено в числовое или числовое редактируемое данное; таким образом, имеет место доредактирование.
(79) Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) оператора MULTIPLY (УМНОЖИТЬ) (1 ЯДР). Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) обеспечивает программисту возможность указать процедуры, которые должны быть выполнены, когда для оператора MULTIPLY (УМНОЖИТЬ) не выполняется условие переполнения.
(80) Вариант EXTEND (ДОПОЛНЯЕМЫЙ) оператора OPEN (ОТКРЫТЬ) (2 ОТД, 2 ИПД). Вариант EXTEND (ДОПОЛНЯЕМЫЙ) оператора OPEN (ОТКРЫТЬ) может быть использован для относительного или индексного файла.
(81) Оператор PURGE (ОЧИСТИТЬ) (2 КОМ). Оператор PURGE (ОЧИСТИТЬ) побуждает систему управления сообщениями ликвидировать любое незавершенное сообщение, которое было передано одним или несколькими операторами SEND (ПОСЛАТЬ).
(82) Оператор PERFORM (ВЫПОЛНИТЬ) (1 ЯДР). Имя-процедуры может быть опущено, что равнозначно последовательному выполнению повелительных операторов, предшествующих фразе END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ), заканчивающей этот оператор PERFORM (ВЫПОЛНИТЬ).
(83) Оператор PERFORM (ВЫПОЛНИТЬ) (2 ЯДР). Вариант TEST AFTER (С ПРОВЕРКОЙ ПОСЛЕ) означает, что проверка условия должна проводиться после выполнения указанного набора операторов. Вариант TEST BEFORE (С ПРОВЕРКОЙ ДО) означает, что проверка условий должна проводиться до выполнения указанного набора операторов.
(84) Оператор PERFORM (ВЫПОЛНИТЬ) (2 ЯДР). В варианте VARYING (МЕНЯЯ) оператора PERFORM (ВЫПОЛНИТЬ) должно быть разрешено по крайней мере шесть фраз AFTER (ЗАТЕМ). В предыдущем стандарте разрешалось максимум две фразы AFTER (ЗАТЕМ).
(85) Оператор READ (ЧИТАТЬ) (2 ПОД, 2 ОТД, 2 ИПД). Если оператор READ (ЧИТАТЬ) используется с вариантом INTO (В), разрешаются записи переменной длины. Вариант NEXT (СЛЕДУЮЩУЮ) разрешен в операторе READ (ЧИТАТЬ), ссылающемся на файл с последовательной организацией.
(86) Вариант NOT AT END (HE В КОНЦЕ) оператора READ (ЧИТАТЬ (1 ПОД, 1 ОТД, 1 ИПД). Вариант NOT AT END (HE В КОНЦЕ) оператора READ (ЧИТАТЬ) обеспечивает программисту возможность указывать процедуры, которые должны быть выполнены, если для оператора READ (ЧИТАТЬ) не выполняется условие "в конце".
(87) Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) оператора READ (ЧИТАТЬ) (1 ОТД, 1 ИПД). Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) оператора READ (ЧИТАТЬ) обеспечивает программисту возможность указывать процедуры, которые должны быть выполнены, когда условие ошибки ключа для оператора READ (ЧИТАТЬ) не выполняется.
(88) Вариант WITH DATA (ЕСТЬ ДАННЫЕ) оператора RECEIVE (ПОЛУЧИТЬ) (1 КОМ). Вариант WITH DATA (ЕСТЬ ДАННЫЕ) оператора RECEIVE (ПОЛУЧИТЬ) предоставляет программисту возможность указать процедуры, которые должны быть выполнены, когда система управления сообщениями делает данные доступными во время выполнения оператора RECEIVE (ПОЛУЧИТЬ).
(89) Оператор REPLACE (ЗАМЕНИТЬ) (2 ОИТ). Оператор REPLACE (ЗАМЕНИТЬ) приводит к замене каждого вхождения указанного текста в исходной программе на соответствующий текст, указанный в операторе REPLACE (ЗАМЕНИТЬ).
(90) Оператор RETURN (ВЕРНУТЬ) (1 СРТ). Записи переменной длины разрешены, если в операторе RETURN (ВЕРНУТЬ) имеется вариант INTO (В).
(91) Вариант NOT AT END (HE В КОНЦЕ) оператора RETURN (ВЕРНУТЬ) (1 СРТ). Вариант NOT AT END (HE В КОНЦЕ) оператора RETURN (ВЕРНУТЬ) предоставляет программисту возможность указывать процедуры, которые должны быть выполнены, если для оператора RETURN (ВЕРНУТЬ) не выполняется условие "в конце".
(92) Оператор REWRITE (ОБНОВИТЬ) (2 ОТД, 2 ИПД). Запись в относительном или индексном файле может заменяться записью другой длины.
(93) Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) оператора REWRITE (ОБНОВИТЬ) (1 ОТД, 1 ИПД). Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) оператора REWRITE (ОБНОВИТЬ) предоставляет программисту возможность указывать процедуры, которые должны быть выполнены, если условие ошибки ключа для оператора REWRITE (ОБНОВИТЬ) не выполняется.
(94) Оператор SEND (ПОСЛАТЬ) (2 КОМ). Вариант REPLACING LINE (ЗАМЕНЯЯ СТРОКУ) предоставляет новую возможность оператора SEND (ПОСЛАТЬ).
(95) Оператор SET (УСТАНОВИТЬ) (1 ЯДР). В ряде операндов, предшествующих слову ТО (В) оператора SET (УСТАНОВИТЬ), теперь могут одновременно встречаться и имена-индексов и идентификаторы. Два новых варианта оператора SET (УСТАНОВИТЬ) позволяют изменять установку внешнего переключателя и значение условной переменной.
(96) Оператор SORT (СОРТИРОВАТЬ) (1 СРТ). В варианте GIVING (ПОЛУЧАЯ) оператора SORT (СОРТИРОВАТЬ) разрешается несколько имен-файлов. Файл, указанный в операторе SORT (СОРТИРОВАТЬ), может содержать записи переменной длины. Файл, указанный в варианте USING (ИСПОЛЬЗУЯ) или GIVING (ПОЛУЧАЯ) оператора SORT (СОРТИРОВАТЬ), может быть относительным или индексным файлом. Файлы, указанные в вариантах USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ), могут находиться на одной и той же физической катушке. Если указан вариант DUPLICATES (С ДУБЛИРОВАНИЕМ), записи, значения ключей которых идентичны, остаются после завершения сортировки в том же порядке, в котором, они были при вводе в процесс сортировки.
(97) Операторы SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ) (1 СРТ). Процедуры ввода и вывода операторов SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ) могут содержать явные передачи управления в точки вне процедуры ввода или вывода. Остальная часть раздела процедур может содержать передачи управления в точки внутри процедуры ввода или вывода. Имя-параграфа может быть указано в варианте INPUT PROCEDURE (ПРОЦЕДУРА ВВОДА) или OUTPUT PROCEDURE (ПРОЦЕДУРА ВЫВОДА).
(98) Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) оператора START (ПОДВЕСТИ) (1 ОТД, 1 ИПД). Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) предоставляет программисту возможность указывать процедуры, подлежащие выполнению, если для оператора START (ПОДВЕСТИ) не выполняется условие ошибки ключа.
(99) Оператор STRING (СОБРАТЬ) (2 ЯДР). Идентификатор в варианте INTO (В) оператора STRING (СОБРАТЬ) может быть групповым данным.
(100) Вариант NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) оператора STRING (СОБРАТЬ) (2 ЯДР). Вариант NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) обеспечивает программисту возможность указывать процедуры, подлежащие выполнению, если для оператора STRING (СОБРАТЬ) выполняется условие переполнения.
(101) Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) оператора SUBTRACT (ОТНЯТЬ) (1 ЯДР). Вариант NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) обеспечивает программисту возможность указывать процедуры, подлежащие выполнению, если для оператора SUBTRACT (ОТНЯТЬ) не выполняется условие переполнения.
(102) Вариант NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) оператора UNSTRING (РАЗОБРАТЬ) (2 ЯДР). Вариант NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) обеспечивает программисту возможность указывать процедуры, подлежащие выполнению, если для оператора UNSTRING (РАЗОБРАТЬ) не выполняется условие переполнения.
(103) Оператор USE (ИСПОЛЬЗОВАТЬ) (1 ПОД, 1 ОТД, 1 ИПД). Декларативный оператор USE AFTER EXCEPTION/ERROR (ИСПОЛЬЗОВАТЬ ПОСЛЕ ОШИБКИ), указывающий имя файла, имеет приоритет над декларативным оператором, указывающим режим открытия файла.
(104) Оператор USE (ИСПОЛЬЗОВАТЬ) (2 МПС). Вариант GLOBAL (ГЛОБАЛЬНО) указывает, что соответствующие декларативные процедуры вызываются во время выполнения любой программы, содержащейся в программе, включающей в себя оператор USE (ИСПОЛЬЗОВАТЬ).
(105) Оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) (2 МПС). Вариант GLOBAL (ГЛОБАЛЬНО) указывает, что соответствующие декларативные процедуры вызываются во время выполнения любой программы, содержащейся в программе, включающей в себя оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ).
(106) Вариант NOT END-OF-PAGE (НЕ В КОНЦЕ СТРАНИЦЫ) оператора WRITE (ПИСАТЬ). Вариант NOT END-OF-PAGE (HE В КОНЦЕ СТРАНИЦЫ) обеспечивает программисту возможность указывать процедуры, подлежащие выполнению, если для оператора WRITE (ПИСАТЬ) не выполняется условие конца страницы.
(107) Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) оператора WRITE (ПИСАТЬ) (1 ОТД, 1 ИПД). Вариант NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) обеспечивает программисту возможность указывать процедуры, подлежащие выполнению, если для оператора WRITE (ПИСАТЬ) не выполняется условие ошибки ключа.
2.2. Существенные изменения, потенциально влияющие на имеющиеся программы
Ниже приводится список изменений, которые могли бы воздействовать на существующие программы, например, добавление правила для ранее не определенных ситуаций или изменение правила для существующего глагола. Для каждого элемента этого списка приводится обоснование введения такого изменения.
Основные изменения вызваны стремлением повысить переносимость программ и облегчить написание новых программ, а также дать уточнение неясных или двусмысленных правил. Добавления новых средств также преследуют цель снизить стоимость разработки программ. Ожидается, что затраты на изменение существующих программ должны окупиться экономией при разработке и сопровождении программ. В этой части содержится список изменений, потенциально влияющих на имеющиеся программы. В тех случаях, где в ГОСТ 22558 имелись неясности, сделаны уточнения в соответствии с фактическим промышленным стандартом, если таковой имелся. В любом случае уточняющие разъяснения не приводят к несовместимости стандартов; они могут только привести к возможности несовместимости между некоторой отдельной реализацией и настоящим стандартом. Обоснования, включенные в следующий список, относятся прежде всего к воздействию изменений на Кобол-программы, соответствующие правилам ГОСТ 22558. Остается неясным влияние изменений на программы, в которых:
(1) нарушены правила ГОСТ 22558 или
(2) используются средства, для которых правила ГОСТ 22558 были определены недостаточно четко, и поэтому зависят от определяемых реализацией расширений или интерпретации правил.
(1) Длина константы ALL литерал (ВСЕ литерал) (2 ЯДР). Когда стандартная константа ALL литерал (ВСЕ литерал) не связана с другим данным, длиной строки является длина литерала.
Обоснование
Правила в стандарте Кобола для размера стандартной константы ALL литерал (ВСЕ литерал) различны в зависимости от того, где использована стандартная константа в программе. Если стандартная константа ALL литерал (ВСЕ литерал) используется в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА), ее длина равна единице, а ее значением является самая левая литера литерала. Рассмотрим следующий пример.
IDENTIFICATION DIVISION. | |||
PROGRAM-ID. EXAMPLE. | |||
ENVIRONMENT DIVISION. | |||
CONFIGURATION SECTION. | |||
OBJECT-COMPUTER. | |||
PROGRAM COLLATING SEQUENCE IS COL-SEQ. | |||
SPECIAL-NAMES. | |||
COL-SEQ IS ALL "0123456789" | |||
DATA DIVISION. | |||
01 FIELD 1 PIC X (80). | |||
PROCEDURE DIVISION. | |||
START-PROGRAM. | |||
IF FIELD-1=ALL "ABCDEF" | |||
DISPLAY "TEXT IS TRUE". | |||
РАЗДЕЛ ИДЕНТИФИКАЦИИ. | |||
ПРОГРАММА. ПРИМЕР. | |||
РАЗДЕЛ ОБОРУДОВАНИЯ. | |||
СЕКЦИЯ КОНФИГУРАЦИИ. | |||
ОБЪЕКТНАЯ-МАШИНА. | |||
ПРОГРАММНЫЙ АЛФАВИТ ПР-АЛФ. | |||
СПЕЦИАЛЬНЫЕ-ИМЕНА. | |||
ПР-АЛФ ВСЕ "0123456789". | |||
РАЗДЕЛ ДАННЫХ. | |||
01 ПОЛЕ 1 Ш Х (80). | |||
РАЗДЕЛ ПРОЦЕДУР. | |||
НАЧАЛО-ПРОГРАММЫ. | |||
ЕСЛИ ПОЛЕ1 = ВСЕ "АБВГДЕ" | |||
ВЫДАТЬ "ТЕКСТ ВЕРЕН". |
В приведенном выше примере, когда стандартная константа ALL литерал (ВСЕ литерал) используется во фразе имя-алфавита параграфа SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА), используется только первая литера литерала, независимо от количества литер в литерале. Во втором случае IF FIELD1 ="ABCDEF" (ЕСЛИ ПОЛЕ1 = ВСЕ "АБВГДЕ") размером литерала считаются все литеры, входящие в литерал.
Эта противоречивость в правиле для размера константы ALL литерал (ВСЕ литерал) приводит к неясности поведения программы. По новым правилам исключаются противоречия между спецификациями программы и ее поведением, в частности, указывается, что в случае фразы имя-алфавита со стандартной константой ALL литерал (ВСЕ литерал) длина строки равняется длине литерала.
(2) Фраза имя-алфавита (1 ЯДР). Ключевое слово ALPHABET (АЛФАВИТ) должно предшествовать имени-алфавита во фразе имени-алфавита параграфа SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА).
Обоснование
Имена-реализации являются системными именами; имена-алфавитов и мнемонические-имена являются словами, определенными пользователем. В настоящем стандарте системные имена и слова, определенные пользователем, образуют пересекающиеся множества и поэтому могут совпадать. Допустима нижеследующая фраза:
SPECIAL-NAMES. WORD-1 IS WORD-2.
СПЕЦИАЛЬНЫЕ-ИМЕНА. СЛОВО-1 ЕСТЬ СЛОВО-2.
Если WORD-1 (СЛОВО-1) является именем-реализации и именем-алфавита, a WORD-2 (СЛОВО-2) было и мнемоническим-именем и именем-реализации, то невозможно установить, что предполагается в вышеприведенной фразе - фраза имени-реализации или фраза имени-алфавита. Введение ключевого слова ALPHABET (АЛФАВИТ) во фразе имени-алфавита разрешает эту неоднозначность.
Этой проблемы не было в ГОСТ 22558, поскольку системные-имена и слова, определенные пользователем, входили в непересекающиеся множества, поэтому вышеприведенная конструкция не допускалась.
Разрешение совпадения системных-имен и слов, определенных пользователем, способствует облегчению переноса программ с одной реализации на другую: системные-имена больше не нуждаются в замене. Для модификации имеющихся программ перед фразой имени-алфавита необходимо вставить ключевое слово ALPHABET (АЛФАВИТ).
(3) Программный алфавит (1 ИПД). Программный алфавит (основная последовательность), используемый для доступа к индексному файлу, является алфавитом, связанным с внутренним набором литер, действовавшим для файла во время создания файла.
Обоснование
В ГОСТ 22558 правила не устанавливали, какой именно алфавит используется для извлечения и занесения записей при доступе к индексному файлу. Были возможны две различные интерпретации.
а) Внутренний алфавит.
б) Алфавит, определенный фразой PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ).
Новое правило стандарта Кобола явно указывает, что для извлечения и занесения записей при доступе к индексному файлу будет использоваться внутренний алфавит. Большинство из реализаций используют внутренний алфавит для извлечения и занесения записей при доступе к индексному файлу.
(4) Фраза CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК) (1 ЯДР). Литерал, указанный в фразе CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК), не может быть стандартной константой.
Обоснование
В ГОСТ 22558 допускалось использование стандартной константы во фразе CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК), но не было правил, определяющих смысл использования в этом контексте литералов HIGN-VALUE (НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ), LOW-VALUE (НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ) или ALL литерал (ВСЕ литерал).
Можно было бы добавить правила для разъяснения значения различных случаев, но польза от этого кажется мнимой. Таким образом, использование стандартной константы во фразе CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК) было запрещено. Предполагается, что эти изменения коснутся некоторых имеющихся программ.
(5) Фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) (1 ОТД). Данное относительного ключа, указанное во фразе RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ), не должно содержать символ шаблона Р (М).
Обоснование
В ГОСТ 22558 допускается, чтобы относительный ключ содержал в строке литер шаблона символ Р (М). Если бы относительный ключ был бы так описан, не все записи в файле были бы доступны программе. Например, данное с шаблоном 9Р (9М) может иметь только значения 00, 10, 20, 30, 40, 50, 60, 70, 80 и 90. Это значит, что доступны только записи с этими номерами. Использование такого описания ключа возможно является ошибкой и может диагностироваться как таковое в соответствии с настоящим стандартом.
(6) Фраза LINAGE (ВЕРСТКА) (2 ПОД). Файлы, для которых указана фраза LINAGE (ВЕРСТКА), не могут быть открыты в режиме дополнения.
Обоснование
Поведение файла, имеющего соответствующую фразу LINAGE (ВЕРСТКА) и открытого в режиме дополнения, определено недостаточно четко в ГОСТ 22558. Например, указано, что значение LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) при выполнении оператора OPEN (ОТКРЫТЬ) устанавливается в единицу. Кроме того, в ГОСТ 22558 не определяются значения для файла, имеющего соответствующую фразу LINAGE (ВЕРСТКА) и открываемого в режиме дополнения.
Возможность режима дополнения при открытии файла, имеющего связанную с ним фразу LINAGE (ВЕРСТКА), определяется техникой, используемой для реализации таких файлов. Некоторые разработчики реализовали режим дополнения для открытия файла, имеющего соответствующую фразу LINAGE (ВЕРСТКА). Другие разработчики запрещают режим дополнения при открытии файла, имеющего соответствующую фразу LINAGE (ВЕРСТКА).
В настоящем стандарте определено, что вариант EXTEND (ДОПОЛНЯЕМЫЙ) может использоваться только для файлов, для которых фраза LINAGE (ВЕРСТКА) не указана. Предполагается, что пользователи, у которых реализовано OPEN EXTEND (ОТКРЫТЬ ДОПОЛНЯЕМЫЙ) для файлов, имеющих в описании фразу LINAGE (ВЕРСТКА), будут продолжать поддерживать эту функцию. Независимо от того, будет ли еще какая-либо реализация делать такой вариант, введенные изменения отразятся на малом количестве имеющихся программ.
(7) Вариант FOOTING (КОНЦОВКА) (2 ПОД). Если вариант FOOTING (КОНЦОВКА) не указан, не выполняется никакое условие конца страницы, независимо от условия переполнения страницы.
Обоснование
В ГОСТ 22558 спецификации поля концовки во фразе LINAGE (ВЕРСТКА) и операторе WRITE (ПИСАТЬ) противоречивы. Некоторые имеющиеся реализации обеспечивают для поля концовки одну строку, в то время как другие реализации не обеспечивают поле концовки, если фраза FOOTING (КОНЦОВКА) не указана. Это несоответствие нельзя разрешить, не затрагивая некоторые имеющиеся реализации. Новое правило базируется на принципе:
если поле концовки не указано, значит оно нежелательно.
Таким образом, если фраза FOOTING (КОНЦОВКА) не указана во фразе LINAGE (ВЕРСТКА), то не существует поля концовки и не выполняется условие конца страницы. Это изменение повлияет только на те программы, в которых для файла не указан вариант FOOTING (КОНЦОВКА) во фразе LINAGE и которые используют оператор WRITE (ПИСАТЬ) с вариантом END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) для этого файла и используют имеющуюся реализацию, обеспечивающую поле концовки.
(8) Фраза OCCURS (ПОВТОРЯЕТСЯ) (2 ЯДР). Если принимающее данное является данным переменной длины и содержит объект варианта DEPENDING ON (В ЗАВИСИМОСТИ ОТ), будет использоваться максимальная длина данного.
Обоснование
В ГОСТ 22558 длина вычислялась по значению данного фразы DEPENDING ON (В ЗАВИСИМОСТИ ОТ) до выполнения оператора. Использование правил ГОСТ 22558 с оператором MOVE (ПОМЕСТИТЬ) или READ INTO (ЧИТАТЬ В) могло привести в результате к потере данного, если значение данного во фразе DEPENDING ON (В ЗАВИСИМОСТИ ОТ) не было установлено для указания длины посылаемого данного до выполнения оператора MOVE (ПОМЕСТИТЬ).
FD INPUT-FILE. | ||
01 А. | ||
02 A-TABLE. | ||
03 A-ODO PIC 99. | ||
03 A-ITEM OCCURS 1 ТО 10 TIMES DEPENDING ON A-ODO. | ||
WORKING-STORAGE SECTION. | ||
01 B. | ||
02 B-TABLE. | ||
03 B-ODO PIC 99. | ||
03 B-ITEM OCCURS 1 TO 10 TIMES DEPENDING ON B-ODO. | ||
ОФ ВХОДНОЙ-ФАЙЛ. | ||
01 A. | ||
02. А-ТАБЛИЦА. | ||
03 А-ОДО Ш 99. | ||
03 А-ДАННОЕ ПОВТОРЯЕТСЯ 1 ДО 10 РАЗ В ЗАВИСИМОСТИ ОТ | ||
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ. | ||
01 Б. | ||
02 Б-ТАБЛИЦА. | ||
03 Б-ОДО Ш 99. | ||
03 Б-ДАННОЕ ПОВТОРЯЕТСЯ 1 ДО 10 РАЗ В ЗАВИСИМОСТИ ОТ | ||
Б-ОДО. |
Предположим, что в приведенном фрагменте программы A-ODO (А-ОДО) установлено в 10 и B-ODO (Б-ОДО) установлено в 5. Согласно стандарту Кобола для того, чтобы поместить все повторения A-ITEM (А-ДАННОЕ) в B-TABLE (Б-ТАБЛИЦА), нужно было бы сначала поместить A-ODO (А-ОДО) в B-ODO (Б-ОДО). Таким образом, следующие последовательности операторов Кобола эквивалентны:
По ГОСТ 22558 | По настоящему стандарту Кобола | |
MOVE A-ODO TO B-ODO. | MOVE А ТО В. | |
MOVE A TO В. | ||
READ INPUT-FILE. | READ INPUT-FILE INTO В. | |
MOVE A-ODO TO B-ODO. | ||
MOVE A TO B. | ||
ПОМЕСТИТЬ А-ОДО В Б-ОДО. | ПОМЕСТИТЬ А В Б. | |
ПОМЕСТИТЬ А В Б. | ||
ЧИТАТЬ ВХОДНОЙ-ФАЙЛ | ЧИТАТЬ ВХОДНОЙ-ФАЙЛ В Б. | |
ПОМЕСТИТЬ А-ОДО В Б-ОДО. | ||
ПОМЕСТИТЬ А В Б. |
Некоторые реализации позволяют, чтобы за таблицами переменной длины в записи следовали другие данные. В следующем примере A-TRAILER (А-ОСТАТОК) и B-TRAILER (Б-ОСТАТОК) в некоторых реализациях динамически размещаются во время выполнения программы в соответствии со значениями A-ODO (А-ОДО) и B-ODO (Б-ОДО).
FD INPUT-FILE. | |||
01 А. | |||
02 A-TABLE. | |||
03 A-ODO PIC 99. | |||
03 A-ITEM OCCURS 1 TO 10 TIMES DEPENDING ON A-ODO. | |||
02 A-TRAILER PIC XX. | |||
WORKING-STORAGE SECTION. | |||
01 В. | |||
02 B-TABLE. | |||
03 B-ODO PIC 99. | |||
03 B-ITEM OCCURS 1 TO 10 TIMES DEPENDING ON B-ODO. | |||
02 B-TRAILER PIC XX. | |||
ОФ ВХОДНОЙ-ФАЙЛ. | |||
01 A. | |||
02 А-ТАБЛИЦА. | |||
03 А-ОДО Ш 99. | |||
03 А-ДАННОЕ ПОВТОРЯЕТСЯ 1 ДО 10 РАЗ В ЗАВИСИМОСТИ ОТ | |||
А-ОДО. | |||
02 А-ОСТАТОК Ш XX. | |||
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ. | |||
01 Б. | |||
02 Б-ТАБЛИЦА. | |||
03 Б-ОДО Ш 99. | |||
03 Б-ДАННОЕ ПОВТОРЯЕТСЯ 1 ДО 10 РАЗ В ЗАВИСИМОСТИ ОТ | |||
Б-ОДО. | |||
02 Б-ОСТАТОК Ш XX. |
Если значение A-ODO (А-ОДО) равно 10 и значение B-ODO (Б-ОДО) равно 5, то, согласно ГОСТ 22558, поместить A-TABLE (А-ТАБЛИЦА) в B-TABLE (Б-ТАБЛИЦА) значило бы поместить только пять вхождений A-ITEM (А-ДАННОЕ), a B-TRAILER (Б-ОСТАТОК) остался бы без изменения. По правилам настоящего стандарта вхождения A-ITEM (А-ДАННОЕ) от 6 до 10 было бы тоже помещено, и B-TRAILER (Б-ОСТАТОК) было бы перекрыто.
Если значение A-ODO (А-ОДО) равно 5 и значение B-ODO (Б-ОДО) равно 5, то согласно ГОСТ 22558 поместить A-TABLE (А-ТАБЛИЦА) в B-TABLE (Б-ТАБЛИЦА) значило бы поместить только пять вхождений A-ITEM (А-ДАНHOE), a B-TRAILER (Б-ОСТАТОК) осталось бы без изменения. По правилам настоящего стандарта вхождения B-ITEM (Б-ДАННОЕ) от 6 до 10 будут заполнены пробелами, и B-TRAILER (Б-ОСТАТОК) изменится.
На программы, соответствующие ГОСТ 22558, это изменение правила пересылки не повлияет.
Для изменения имеющихся программ, на которые влияют предложенные изменения, нужно перестроить соответствующие записи данных так, чтобы в записи не было данных, следующих за данными переменной длины.
(9) Символ Р (М) шаблона (1 ЯДР). При ссылке на данное, описанное шаблоном, содержащим символ Р (М), цифровые позиции, указанные символом Р (М), означают нули в следующих операциях: (1) любой операции, требующей числовое посылаемое данное; (2) операторе MOVE (ПОМЕСТИТЬ), в котором посылаемый операнд является числовым и строка литер его шаблона содержит символ Р (М); (3) операторе MOVE (ПОМЕСТИТЬ), где посылаемый операнд является числовым редактируемым и строка литер его шаблона содержит символ Р (М) и принимающий операнд является числовым или числовым редактируемым; (4) операции сравнения, в которой оба операнда являются числовыми.
Обоснование
В ГОСТ 22558 считалось, что цифровые позиции, описанные символом Р (М), содержат нули при использовании в операциях, включающих преобразование данных из одной формы представления в другую. При этом не указывалось, что происходит в операциях, не включающих в себя преобразование данных, или когда преобразование является необходимым. Настоящий стандарт определяет, когда цифровые позиции, описанные символом Р (М), будут рассматриваться как содержащие нули.
Это разъяснение согласуется с текущими реализациями для общих применений литеры Р (М) в шаблоне в цифровых контекстах и дает согласующиеся результаты для числовых и буквенно-цифровых пересылок, где посылаемое данное является числовым. Например, в результате пересылки данного, описание которого PICTURE 9Р VALUE IS 10 (ШАБЛОН 9М ЗНАЧЕНИЕ 10), в данные с PICTURE 99 (ШАБЛОН 99) и PICTURE XX (ШАБЛОН XX) в принимающих долях будет 10 в обоих случаях. В более непонятных случаях, где числовые данные не требуются, как и в случае, когда данное сравнивается с буквенно-цифровым данным, будет использоваться значение литеры. Таким образом, данное, описание которого PICTURE 9Р (ШАБЛОН 9М) и VALUE IS 10 (ЗНАЧЕНИЕ 10), при сравнении равно данному с PICTURE XX (ШАБЛОН XX) и VALUE IS "1" (ЗНАЧЕНИЕ "1") (за цифрой 1 следует пробел).
Предполагается, что эти изменения стандарта коснутся немногих программ.
(10) Заголовок раздела процедур (1 МПС). Данное, появляющееся во фразе USING (ИСПОЛЬЗУЯ) заголовка раздела процедур, не может иметь фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) в своей статье описания данного.
Обоснование
Согласно ГОСТ 22558 во фразе USING (ИСПОЛЬЗУЯ) заголовка раздела процедур могло быть указано данное, описанное фразой REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ). Таким образом, следующий пример был верен:
LINKAGE SECTION. | |
01 A PIC X (10). | |
01 В REDEFINES A PIC 9 (10). | |
PROCEDURE DIVISION USING А, В. | |
СЕКЦИЯ СВЯЗИ. | |
01 А Ш Х (10). | |
01 Б ПЕРЕОПРЕДЕЛЯЕТ А Ш 9 (10). | |
РАЗДЕЛ ПРОЦЕДУР ИСПОЛЬЗУЯ А, Б. |
Если в вызывающей программе указаны два различных параметра, результаты не определены. Разрешение указывать во фразе USING (ИСПОЛЬЗУЯ) заголовка раздела процедур данное со статьей REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) могло бы привести к программистским ошибкам, остающимся невыявленными, приводящим к неверным результатам, и не обеспечивает никаких дополнительных функций. В большинстве случаев программы, в заголовке раздела процедур которых во фразе USING (ИСПОЛЬЗУЯ) указаны переопределяющие данные, могут быть преобразованы подстановкой переопределяемых данных.
(11) Возведение в степень (2 ЯДР). В настоящем стандарте определены следующие специальные случаи возведения в степень:
а) если значение, меньшее или равное нулю, возводится в нулевую степень, возникает условие переполнения;
б) если возведение в степень дает положительное или отрицательное действительное число, возвращается положительное число;
в) если результатом вычисления является не действительное число, возникает условие переполнения.
Обоснование
Поскольку ГОСТ 22558 не устанавливал, что может произойти в этих специальных случаях возведения в степень, выбор обработки предоставлялся реализации. Это изменение приводит к устранению неопределенной ситуации и поможет обеспечению переносимости программ. Поскольку в двух из этих случаев вырабатывается условие ошибки и третий случай совпадает с большинством реализаций, эти изменения затронут немногие программы.
(12) Порядок выполнения условных выражений (2 ЯДР). Два или больше условий, связанных только знаком логической операции AND (И) или только знаком логической операции OR (ИЛИ) на одном иерархическом уровне, вычисляются в порядке слева направо и вычисление этого иерархического уровня заканчивается, как только определено значение истинности, независимо от того, вычислялись ли все составные части связанных условий на этом иерархическом уровне.
Обоснование
Поскольку согласно ГОСТ 22558 порядок вычисления условных выражений определяется реализацией, одни и те же программы, использующие одни и те же данные для ввода, приводят к получению определенных результатов на одних реализациях и неопределенных - на других реализациях. Определение порядка вычисления усиливает переносимость программ.
Это изменение позволит программам проверить, принадлежит ли индекс интервалу, непосредственно до использования его как индекса в операторе; например:
IF INDEX-A IS LESS THAN 5 AND TABLE-A (INDEX-A) IS EQUAL TO 25.
ЕСЛИ ИНДЕКС-А МЕНЬШЕ 5 И ТАБЛИЦА-А (ИНДЕКС-А) РАВНО 25.
Изменение может повлиять на выполнение декларатив для фразы ALL REFERENCES (ПРИ ВСЕХ ССЫЛКАХ) в некоторых компиляторах. Изменение не оказывает никакого другого эффекта на имеющиеся программы.
(13) Условие класса (1 ЯДР). Проверка на ALPHABETIC (БУКВЕННОЕ) дает значение истины для прописных букв, строчных букв и литеры пробела. Проверка ALPHABETIC-UPPER (ПРОПИСНЫЕ) дает значение истины для прописных букв и литеры пробела. Проверка ALPHABETIC-LOWER (СТРОЧНЫЕ) дает значение истины для строчных букв и литеры пробела.
Обоснование
В старых реализациях Кобола буквенные литеры, принятые в большинстве наборов литер, были только прописными. Поэтому в ГОСТ 22558 проверка ALPHABETIC (БУКВЕННОЕ) давала значение истины для прописных литер и литеры пробела. В настоящее время наборы литер включают и прописные и строчные литеры. Согласно изменению в технологии проверка ALPHABETIC (БУКВЕННОЕ) сейчас следует логическому значению термина и воспринимает все буквенные литеры - и прописные, и строчные.
Обеспечиваются две дополнительные проверки для подклассов буквенных литер. В частности, изменение ALPHABETIC (БУКВЕННОЕ) в новую проверку ALPHABETIC-UPPER (ПРОПИСНЫЕ) в соответствующих ГОСТ 22558 исходных программах даст возможность программам выполняться в соответствии с правилами ГОСТ 22558.
Некоторые реализации уже сделали эти изменения. Поэтому это изменение касается некоторых программ, использующих проверку класса ALPHABETIC (БУКВЕННОЕ) в двух случаях: (1) на реализациях, допускающих только прописные буквы и пробел, или (2) там, где исходные программы не могут разрешать восприятие строчных букв. Многие исходные программы используют проверку класса на ALPHABETIC (БУКВЕННОЕ), поэтому изменение из ALPHABETIC (БУКВЕННОЕ) в ALPHABETIC-UPPER (ПРОПИСНЫЕ) должно быть выполнено программой автоматического преобразования кода.
(14) Оператор CANCEL (ОСВОБОДИТЬ) (2 МПС).
Оператор CANCEL (ОСВОБОДИТЬ) закрывает все открытые файлы.
Обоснование
В ГОСТ 22558 не определено состояние файлов, остающихся в режиме открытия, когда освобождается программа. Изменение в настоящем стандарте вырабатывает предсказуемый результат при выполнении этого оператора. Это повлияет только на те программы, которые освобождены и предполагают, что файлы освобожденной программы должны остаться открытыми после выполнения оператора CANCEL (ОСВОБОДИТЬ).
(15) Оператор CLOSE (ЗАКРЫТЬ) (2 ПОД). Вариант NO REWIND (БЕЗ ПЕРЕМОТКИ) не может быть указан в операторе CLOSE (ЗАКРЫТЬ), имеющем фразу REEL/UNIT (КАТУШКУ/ТОМ).
Обоснование
В ГОСТ 22558 правила для вариантов NO REWIND (БЕЗ ПЕРЕМОТКИ) и REEL/UNIT (КАТУШКУ/ТОМ) иногда были противоречивы. Противоречие заключалось в том, что правила для варианта NO REWIND (БЕЗ ПЕРЕМОТКИ) указывают, что катушка/том остаются в текущем положении, в то время как правила варианта REEL/UNIT (КАТУШКУ/ТОМ) указывают, что должна иметь место перемотка катушки/тома.
Изменение в настоящем стандарте повлияет на очень немногие программы, поскольку оператор CLOSE (ЗАКРЫТЬ) с обоими вариантами NO REWIND (БЕЗ ПЕРЕМОТКИ) и REEL/UNIT (КАТУШКУ/ТОМ) не мог быть правильно обработан.
(16) Оператор COPY (КОПИРОВАТЬ) (1 ОИТ). Если слово COPY (КОПИРОВАТЬ) появляется в статье-комментарии или месте, где может появиться статья-комментарий, оно рассматривается как часть статьи-комментария.
Обоснование
В стандарте Кобола появление слова COPY (КОПИРОВАТЬ) в статье-комментарии являлось неопределенной ситуацией. Определение этой ситуации в настоящем стандарте улучшит программную переносимость.
(17) Оператор COPY (КОПИРОВАТЬ) (1 ОИТ). Если в параграфе SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) не указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ), после обработки всех операторов COPY (КОПИРОВАТЬ) отладочная строка будет рассматриваться как имеющая все характеристики строки-комментария.
Обоснование
В ГОСТ 22558 не рассматривалась ситуация оператора COPY (КОПИРОВАТЬ) или части оператора COPY (КОПИРОВАТЬ), появляющегося в строке отладки. Рассмотрим следующий оператор COPY (КОПИРОВАТЬ):
COPY XYZ | |
D REPLACING 1 BY 2. | |
КОПИРОВАТЬ АБВ | |
Т ЗАМЕНЯЯ 1 НА 2. |
Если программа компилируется без фразы WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ), ГОСТ 22558 не определяет, будет ли выполняться вариант REPLACING (ЗАМЕНЯЯ). По правилам настоящего стандарта вариант REPLACING (ЗАМЕНЯЯ) выполняется.
Имеет место несовместимость, если при реализации ГОСТ 22558 оговорено, что отладочная строка рассматривается как строка комментария. Если же при реализации предполагается, что отладочная строка не рассматривается как строка комментария, несоответствие не имеет места.
Изменение в настоящем стандарте определяет, как обрабатывать такую ситуацию, усиливая тем самым степень программной совместимости. Это изменение повлияет на очень небольшое количество имеющихся программ.
(18) Оператор COPY (КОПИРОВАТЬ) (2 ОИТ). Псевдотекст-1 не может состоять полностью из разделителя запятая или разделителя точки с запятой.
Обоснование
В ГОСТ 22558 допускалось, чтобы псевдотекст-1 в операторе COPY (КОПИРОВАТЬ) состоял полностью из разделителя запятая или разделителя точка с запятой, но не определял, при каких условиях происходит замена. Любая попытка определить семантику в этой ситуации привела бы потенциальной несовместимости.
Поскольку нет явной пользы от замены одинойной запятой или точки с запятой, это средство удалено из настоящего стандарта.
_________________
* Текст документа соответствует оригиналу. - .
(19) Оператор DISPLAY (ВЫДАТЬ) (1 ЯДР). После выдачи последнего операнда на устройство, устройство будет установлено в самую левую позицию следующей строки устройства.
Обоснование
В ГОСТ 22558 позиционирование устройства после последнего операнда не определено. Новое правило в настоящем стандарте необходимо для полного определения варианта NO ADVANCING (БЕЗ ПРОДВИЖЕНИЯ). Большинство реализаций уже функционируют соответственно новому правилу.
(20) Оператор DIVIDE (РАЗДЕЛИТЬ) (2 ЯДР).
Любые индексы для идентификатора-4 варианта REMAINDER (ОСТАТОК) вычисляются после запоминания результата операции DIVIDE (РАЗДЕЛИТЬ), в идентификаторе-3 варианта GIVING (ПОЛУЧАЯ).
Обоснование
В ГОСТ 22558 не определена точка, в которой определяется любой индекс в варианте REMAINDER (ОСТАТОК) во время обработки оператора DIVIDE (РАЗДЕЛИТЬ).
Это изменение может повлиять на имеющиеся программы, если:
(1) частное используется как индекс для остатка, и
(2) вычисление индекса в реализации Кобола еще не вычисляет индекс по методике, определенной настоящим стандартом. Например:
01 DD PIC 99 VALUE IS 50. | |||
01 DR PIC 99 VALUE IS 2. | |||
01 QU PIC 99. | |||
01 REMAIN. | |||
02 RM PIC 99 OCCURS 100 TIMES. | |||
PROCEDURE DIVISION. | |||
DIVIDE DD BY DR GIVING QU REMAINDER RM (QU). | |||
01 | ДД Ш 99 ЗНАЧЕНИЕ 50. | ||
01 | ДР Ш 99 ЗНАЧЕНИЕ 2. | ||
01 | КУ Ш 99. | ||
01 | ОСТАТ. | ||
02 ОШ Ш 99 ПОВТОРЯЕТСЯ 100 РАЗ. | |||
РАЗДЕЛ ПРОЦЕДУР. | |||
РАЗДЕЛИТЬ ДД НА ДР ПОЛУЧАЯ КУ ОСТАТОК ОШ (КУ). |
Это изменение повлияет только на некоторые программы, если таковые имеются.
(21) Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) (1 МПС). Если в вызываемой программе нет следующего выполнимого оператора, выполняется неявный оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ).
Обоснование
В ГОСТ 22558 эта ситуация была не определена. Определение этой ситуации в настоящем стандарте обеспечивает большую переносимость программ. Это изменение повлияет только на программы, зависящие от некоторых других действий реализации, когда оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) опущен.
(22) Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) (1 МПС). Для оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) появляется следующее новое правило: "... концы диапазонов всех операторов PERFORM (ВЫПОЛНИТЬ), выполняемых вызываемой программой, считаются достигнутыми". Эта ситуация в ГОСТ 22558 не определена.
Обоснование
В ГОСТ 22558 общее правило 3 оператора CALL (ВЫЗВАТЬ) гласит: "При всех последующих входах в вызываемую программу состояние программы остается неизменным после последнего выхода из нее. Состояние программы включает все ее поля данных, состояние и позиционирование всех файлов и все установки переключателей". Не ясно, рассматривается или нет активация оператора PERFORM (ВЫПОЛНИТЬ) как часть состояния программы. В настоящем стандарте эта неоднозначность разрешена добавлением правила о том, что состояние программы не изменяется за исключением того, что границы диапазонов всех операторов PERFORM (ВЫПОЛНИТЬ) считаются достигнутыми.
Потенциальная несовместимость остается, если при реализации ГОСТ 22558 было принято решение не считать достигнутыми концы диапазонов оператора PERFORM (ВЫПОЛНИТЬ). Если же при реализации было принято рассматривать концы диапазонов оператора PERFORM (ВЫПОЛНИТЬ) достигнутыми, то никакой несовместимости не возникнет.
Данное изменение определяет путь обработки такой ситуации, что повысит степень переносимости программ. Изменение повлияет на небольшое количество имеющихся программ.
(23) Оператор INSPECT (ПРОСМОТРЕТЬ) (2 ЯДР). Определяется порядок вычисления индексов в операторе INSPECT (ПРОСМОТРЕТЬ). Индексирование, связанное с любым индикатором, выполняется только один раз как первая операция при выполнении оператора INSPECT (ПРОСМОТРЕТЬ).
Обоснование
Порядок вычисления индексов в операторе INSPECT (ПРОСМОТРЕТЬ) в ГОСТ 22558 не определен. Несовместимость имеет место, если реализация ГОСТ 22558 выполняет вычисление индексов в операторе INSPECT (ПРОСМОТРЕТЬ) не первой операцией.
Изменение в настоящем стандарте определяет порядок вычисления индексов в операторе INSPECT (ПРОСМОТРЕТЬ). Таким образом, такой оператор как
INSPECT X TALLYING I FOR ALL A (I)
ПРОСМОТРЕТЬ X СЧИТАЯ В I ВСЕ А (I)
который был неясен по ГОСТ 22558, становится определенным в настоящем стандарте Кобола. Определение этой ситуации в стандарте увеличивает степень переносимости программ.
(24) Оператор MERGE (СЛИТЬ) (1 СРТ).
Два файла оператора MERGE (СЛИТЬ) не могут быть указаны во фразе SAME AREA (ОБЩАЯ ОБЛАСТЬ) или SAME SORT/MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ). Только те файлы оператора MERGE (СЛИТЬ) могут быть указаны в фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ), которые связаны с вариантом GIVING (ПОЛУЧАЯ).
Обоснование
Это правило является разъяснением взаимодействия фразы SAME (ОБЩАЯ) и оператора MERGE (СЛИТЬ), которого в ГОСТ 22558 не было. Если это правило, даже не установленное, было нарушено в реализации ГОСТ 22558, оператор MERGE (СЛИТЬ), возможно, не выполнялся должным образом.
Рассмотрим следующее правило оператора MERGE (СЛИТЬ) в настоящем стандарте: "Никакие два имени-файла в операторе MERGE (СЛИТЬ) не могут быть указаны в одной и той же фразе SAME AREA (ОБЩАЯ ОБЛАСТЬ), SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ) или SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ). Соответственно фразе SAME AREA (ОБЩАЯ ОБЛАСТЬ) оператор MERGE (СЛИТЬ) может потребовать, чтобы оба файла были открыты одновременно, однако, фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ) не разрешает, чтобы два файла, указанные в фразе SAME (ОБЩАЯ), были открыты одновременно. Соответственно фразе SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ), оператор MERGE (СЛИТЬ) может потребовать область памяти, используемую для одного из файлов, но может потребоваться, чтобы тот файл был открыт; правила фразы SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ) не разрешили бы открыть тот файл.
Соответственно правилу, гласящему: "Исключение составляют только имена-файлов, относящиеся к фразе GIVING (ПОЛУЧАЯ)", стандартный алгоритм слияния требует доступность в одно и то же время одной записи из каждого сливаемого файла. Поскольку оператор MERGE (СЛИТЬ) определен в терминах ввода-вывода стандарта Кобола, сливаемые файлы не могли использовать одну и ту же область записи. Единственный способ, чтобы в ГОСТ 22558 оператор MERGE (СЛИТЬ) мог работать соответствующим образом - это игнорирование фразы SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ).
Это новое правило добавляет синтаксические ограничения в случаях, вызывающих затруднения. Следовательно, такие ситуации, возможно, имеют место в немногих имеющихся программах.
(25) Оператор PERFORM (ВЫПОЛНИТЬ) (2 ЯДР). Определен порядок инициации (установки начального значения) идентификаторов в нескольких вариантах VARYING (МЕНЯЯ) оператора PERFORM (ВЫПОЛНИТЬ).
Обоснование
Порядок установки начального значения идентификаторов в нескольких вариантах VARYING (МЕНЯЯ) в ГОСТ 22558 не определен. В ГОСТ 22558 общее правило 6 г оператора PERFORM (ВЫПОЛНИТЬ) в частности гласит: "когда изменяются два идентификатора, идентификатор-2 и идентификатор-5 устанавливаются...". Правило настоящего стандарта гласит: "... идентификатор-2 затем идентификатор-5 устанавливаются ...", определяя таким образом порядок установки начального значения.
В случае, когда установка одного идентификатора определяет значение другого, и реализация обеспечивает установку идентификатора-5 первой, может возникнуть несовместимость. Например:
MOVE 2 ТО X. | |||
PERFORM PARA1 VARYING X FROM 1 BY 1 UNTIL X=3 | |||
AFTER Y FROM X BY 1 UNTIL Y=3. | |||
ПОМЕСТИТЬ 2 В X. | |||
ВЫПОЛНИТЬ ПАРА1 МЕНЯЯ X ОТ 1 НА 1 ДО Х=3 | |||
ЗАТЕМ Y ОТ X НА 1 ДО Y=3. |
Если сначала устанавливается Y, оно будет установлено в 2; если первым устанавливается X, Y будет установлено в 1. По правилам настоящего стандарта сначала устанавливается X, поэтому Y будет установлено в 1.
Это изменение разрешает неоднозначность и поможет обеспечить переносимость программ. Вероятность несовместимости мала: реализация должна устанавливать первым идентификатор-5, что возможно, но маловероятно, и одна переменная варианта VARYING (МЕНЯЯ) должна зависеть от другой.
(26) Оператор PERFORM (ВЫПОЛНИТЬ) (2 ЯДР).
В варианте VARYING ... AFTER (МЕНЯЯ … ЗАТЕМ) оператора PERFORM (ВЫПОЛНИТЬ) идентификатор-2 увеличивается до установки идентификатора-5. В ГОСТ 22558 идентификатор-5 устанавливался до увеличения идентификатора-2.
Обоснование
В ГОСТ 22558 общее правило н* устанавливает, что при изменении двух переменных в промежуточном состоянии, когда внутреннее условие истинно, внутренняя переменная (идентификатор-5) устанавливается в ее текущее значение FROM (ОТ) до того, как увеличится внешняя переменная его текущим значением BY (НА).
_________________
* Текст документа соответствует оригиналу. - .
По правилу настоящего стандарта идентификатор-2 увеличивается до установки идентификатора-5.
При этом изменении возникает несовместимость, если имеется зависимость между идентификатором-2 и идентификатором-5.
Рассмотрим следующий пример.
PERFORM PARA3 VARYING X FROM 1 BY 1 UNTIL X IS GREATER THAN 3 | ||
AFTER Y FROM X BY 1 UNTIL Y IS GREATER THAN 3. | ||
ВЫПОЛНИТЬ ПАРA3 МЕНЯЯ X ОТ 1 НА 1 ДО X БОЛЬШЕ 3 | ||
ЗАТЕМ Y ОТ X НА 1 ДО Y БОЛЬШЕ 3. |
По стандарту Кобола PARA3 (ПАРА3) будет выполняться 8 раз со следующими значениями.
X: 1 1 1 2 2 2 3 3
Y: 1 2 3 1 2 3 2 3
По правилам настоящего стандарта PARA3 (ПАРА3) будет выполняться 6 раз со следующими значениями.
X: 1 1 1 2 2 3
Y: 1 2 3 2 3 3
Можно ожидать, что выше приведенный пример выполняется так же, как и следующий пример:
PERFORM PARA2 VARYING X FROM 1 BY 1 UNTIL X IS GREATER THAN 3. PARA2.
PERFORM PARAS VARYING Y FROM X BY 1 UNTIL Y IS GREATER THAN 3.
ВЫПОЛНИТЬ ПАРА2 МЕНЯЯ X ОТ 1 НА 1 ДО X БОЛЬШЕ 3. ПАРА2.
ВЫПОЛНИТЬ ПАРА3 МЕНЯЯ Y ОТ X НА 1 ДО Y БОЛЬШЕ 3.
По ГОСТ 22558 PARA3 (ПАРА3) будет выполняться 8 раз, как показана выше. По правилам настоящего стандарта PARA3 (ПАРА3) будет выполняться 6 раз.
Это изменение повлияет на малое количество имеющихся программ. Ситуация, когда одна переменная в варианте VARYING (МЕНЯЯ) зависит от другой переменной, удобна для обработки полуматриц вдоль главной диагонали; правила в настоящем стандарте определяют эту функцию должным образом, в то время как правила ГОСТ 22558 не определяют ее.
(27) Оператор PERFORM (ВЫПОЛНИТЬ) (2 ЯДР).
Определен порядок вычисления индексов в операторе PERFORM VARYING (ВЫПОЛНИТЬ МЕНЯЯ). Эта ситуация не определена в ГОСТ 22558.
Обоснование
По правилам настоящего стандарта Кобола индексы в операторе PERFORM VARYING (ВЫПОЛНИТЬ МЕНЯЯ) вычисляются следующим образом:
а) для идентификатора (индентификаторов) VARYING (МЕНЯЯ) индексирование выполняется каждый раз при установке или изменении идентификатора;
б) для идентификаторов FROM (ОТ) и BY (НА) индексирование выполняется каждый раз, когда идентификатор используется в операциях установки или приращения;
в) для любых идентификаторов, включенных в условие UNTIL (ДО), индексирование выполняется каждый раз при проверке условия.
ГОСТ 22558 не устанавливал, когда вычисляются индексы в цикле PERFORM (ВЫПОЛНИТЬ). Поэтому реализация была свободна в выборе, когда вычислять индексы. Изменение в настоящем стандарте приводит к несовместимости только в случаях, если программа:
а) использует индексируемые идентификаторы в операторе PERFORM VARYING (ВЫПОЛНИТЬ МЕНЯЯ);
б) изменяет значение (значения) индекса (индексов) в то время, когда оператор PERFORM (ВЫПОЛНИТЬ) активен, и
в) выполняется на реализации, которая осуществляет вычисление индексов, отличное от того, которое определяется в правилах настоящего стандарта.
Это изменение в стандарте Кобола является разрешением неоднозначности и поможет обеспечить переносимость программ. Это изменение повлияет на небольшое количество имеющихся программ.
(28) Оператор READ (ЧИТАТЬ) (1 ПОД, 1 ОТД, 1 ИПД). Вариант INTO (В) не может быть указан:
(а) если не все записи, связанные с файлом, и данное, указанное в варианте INTO (В), являются групповыми данными или элементарными буквенно-цифровыми данными, или (б) если не одно описание записи подчинено статье описания файла.
Обоснование
В ГОСТ 22558 не определена семантика перемещения записи в идентификатор, указанный в варианте INTO (В) оператора READ (ЧИТАТЬ). Для файла с несколькими элементарными записями нет утверждения относительно того, имеет ли место преобразование данных, либо выполняется групповая пересылка данных. Таким образом, в следующем примере:
FD FILEA … . | ||
01 RECA PIC S9 (18). | ||
01 RECB PIC 9 (9) V9 (9). | ||
01 RECC PIC X (18). | ||
WORKING-STORAGE SECTION. | ||
01 A PIC S9 (10) V9 (8). | ||
PROCEDURE DIVISION. | ||
READ FILEA INTO A. | ||
ОФ ФАЙЛА ... . | ||
01 ЗАПА Ш 39 (18). | ||
01 ЗАПБ Ш 9 (9) T9 (9). | ||
01 ЗАПВ Ш X (18). | ||
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ. | ||
01 А Ш 39 (10) Т9 (8). | ||
РАЗДЕЛ ПРОЦЕДУР. | ||
ЧИТАТЬ ФАЙЛА В А. |
перемещение записи в А не определено в ГОСТ 22558. Поэтому разные реализации могут выдавать разные результаты. Новые правила в настоящем стандарте исключают неоднозначность в ситуации, приведенной выше. Это изменение отразится только на программах, выполняющих оператор READ INTO (ЧИТАТЬ B) для файлов, имеющих в описании несколько элементарных записей, среди которых имеется по крайней мере одна числовая запись.
Это изменение повлияет только на некоторые имеющиеся программы.
(29) Оператор RECEIVE (ПОЛУЧИТЬ) (2 КОМ). Если размер сообщения больше области, на которую ссылаются, сообщение заполняет эту область слева направо, начиная с самой левой литеры сообщения. Для передачи остатка сообщения в ту же область должны быть выполнены дальнейшие операторы RECEIVE (ПОЛУЧИТЬ) со ссылкой на ту же очередь, подочередь и т.д.
Обоснование
По ГОСТ 22558, если получена часть сообщения и используется последующий оператор RECEIVE (ПОЛУЧИТЬ), ссылающийся на меньшую структуру определенной очереди, реализация определяет, передается или нет оставшаяся часть сообщения.
В настоящем стандарте разъяснено, что последующие операторы RECEIVE (ПОЛУЧИТЬ), ссылающиеся на полностью определенную структуру очереди, должны быть выполнены для получения остатка сообщения.
Это изменение повлияет только на некоторые программы, если таковые имеются.
(30) Оператор RETURN (ВЕРНУТЬ) (1 СРТ). Вариант INTO (В) не может быть указан, если:
(а) не все записи, связанные с файлом, и не все данные, указанные в варианте INTO (В), являются групповыми или элементарными буквенно-цифровыми данными, или
(б) не одно описание записи подчинено статье описания сортируемого-сливаемого файла.
Обоснование
В ГОСТ 22558 не определена семантика для перемещения записи в идентификатор, указанный в варианте INTO (В) оператора RETURN (ВЕРНУТЬ). Для файла с несколькими элементарными записями нет утверждения относительно того, имеет ли место преобразование данных или выполняется групповая пересылка данных.
SD FILEA … . | ||
01 RECA PIC S9 (18). | ||
01 RECB PIC 9 (9) V9 (9). | ||
01 RECC PIC X (18). | ||
WORKING-STORAGE SECTION. | ||
01 A PIC S9 (10) V9 (8). | ||
PROCEDURE DIVISION. | ||
READ FILEA INTO A. | ||
ОC ФАЙЛА ... . | ||
01 ЗАПА Ш 39 (18). | ||
01 ЗАПБ Ш 9 (9) T9 (9). | ||
01 ЗАПВ Ш X (18). | ||
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ. | ||
01 А Ш 39 (10) Т9 (8). | ||
РАЗДЕЛ ПРОЦЕДУР. | ||
ВЕРНУТЬ ФАЙЛА В А. |
перемещение записи в А не определено в ГОСТ 22558. Поэтому разные реализации могут выдавать разные результаты. Новые правила в настоящем стандарте Кобола устраняют неоднозначность приведенной выше ситуации. Это изменение повлияет только на программы, выполняющие оператор RETURN INTO (ВЕРНУТЬ В) для файла, содержащего несколько элементарных записей, включающих хотя бы одну числовую запись.
Это изменение повлияет только на некоторые программы, если таковые имеются.
(31) Оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) (1 ЯДР). Оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) закрывает все файлы.
Обоснование
В ГОСТ 22558 не определено состояние файлов, остающихся в режиме открытия при завершении работы. В некоторых случаях эта ситуация может привести к ошибкам.
В настоящем стандарте Кобола оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) закрывает все открытые файлы. Многие реализации уже это делают и только некоторых, если таковые имеются, программ коснется это изменение.
(32) Оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) (1 ЯДР). Если единице исполнения доступны сообщения, оператор STOP RUN (ОСТАНОВИТЬ-РАБОТУ) побуждает систему управления сообщениями удалить из очереди любое сообщение, частично полученное этой единицей исполнения.
Обоснование
В ГОСТ 22558 не определено, что происходит с частично полученным сообщением, если единица исполнения выполняет оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ). Имеются три возможности, которые могли бы быть реализованы по стандарту Кобола:
а) система управления сообщениями делает частично полученные сообщения недоступными для любой последующей единицы исполнения посредством:
(1) игнорирования этих сообщений, или
(2) очистки очереди от них непосредственно или как части содержимого общей очереди. На программы, использующие эту реализацию, измененные спецификации не повлияют;
б) система управления сообщениями возвращает сообщение в целом, включая "полученную" часть входной очереди, для обработки некоторой последующей единицей исполнения. Вероятно, это удалось в предположении, что если программа выполняет оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) без окончания обработки входного сообщения, программа, возможно, потерпела неудачу (произошел сбой) и ее выполнение, возможно, будет возобновлено. На программы, использующие этот тип реализации, измененные спецификации повлияли бы;
в) система управления сообщениями оставляет во входных очередях фрагменты сообщений, которые были частично получены, и эти фрагменты становятся доступными для последующих единиц исполнения. Непохоже, чтобы какие-либо программы полагались на такую реализацию, так как вероятность ошибок в обработке была бы очень большой.
Уверены, что большинство реализаций предприняли первый путь, и поэтому похоже, что это изменение повлияет только на некоторые программы.
(33) Оператор STRING (СОБРАТЬ) (2 ЯДР). Определен порядок вычисления индексов в операторе STRING (СОБРАТЬ).
Обоснование
В ГОСТ 22558 порядок вычисления индексов не определен, поэтому определяется реализацией. В частности, не определен относительный порядок вычисления индексов и модификации указателя.
Рассмотрим следующий пример:
01 | A PIC Х (1000). | |||
01 | В PIC XXX. | |||
01 | СС. | |||
02 С1 PIC 9 (4) OCCURS 100 TIMES. | ||||
PROCEDURE, DIVISION. | ||||
MOVE A TO PTR. | ||||
STRING A DELIMITED BY SPACE INTO В POINTER C1 (PTR). | ||||
01 | A Ш X (1000). | |||
01 | Б Ш XXX. | |||
01 | ПТР ПЕРЕОПРЕДЕЛЯЕТ Б Ш 999. | |||
01 | СС. | |||
02 С1 Ш 9(4) ПОВТОРЯЕТСЯ 100 РАЗ. | ||||
РАЗДЕЛ ПРОЦЕДУР. | ||||
ПОМЕСТИТЬ 1 В ПТР. | ||||
СОБРАТЬ А ОГРАНИЧИВАЯСЬ ПРОБЕЛ В Б УКАЗАТЕЛЬ С1 (ПТР). |
В ГОСТ 22558 не определено, вычисляется ли C1 (PTR) (C1 (ПТР)) (а) один раз, или (б) до или после запоминания в В (Б) при каждой итерации. Новые правила в настоящем стандарте Кобола устанавливают, что C1 (PTR) (С1 (ПТР)) вычисляется один раз, непосредственно перед выполнением оператора STRING (СОБРАТЬ).
Это изменение влияет на программу, если идентификатор варианта INTO (В) оператора STRING (СОБРАТЬ) перекрывал индекс ограничителя или идентификатора в варианте WITH POINTER (УКАЗАТЕЛЬ). Такое программирование неудобно и это изменение повлияет на небольшое количество программ, если таковые имеются.
(34) Оператор UNSTRING (РАЗОБРАТЬ) (2 ЯДР).
В операторе UNSTRING (РАЗОБРАТЬ) любое индексирование, связанное с идентификатором DELIMITED BY (ОГРАНИЧИВАЯСЬ), идентификатором INTO (В) идентификатором DELIMITER IN (ОГРАНИЧИТЕЛЬ В) или идентификатором COUNT IN (СЧЕТ В), определяется один раз, непосредственно перед просмотром пересылаемых полей в поисках ограничителя.
Обоснование
Рассмотрим следующий пример: | |||
01 | A PIC Х (30). | ||
01 | ВВ. | ||
02 PTR PIC 99. | |||
01 | СС. | ||
02 C1 PIC XX OCCURS 10 TIMES. | |||
01 | D PIC XX. | ||
01 | Е PIC Х (30). | ||
PROCEDURE DIVISION. | |||
UNSTRING A DELIMITED BY C1 (PTR) INTO BB, E WITH POINTER | |||
PTR. | |||
01 | А Ш X (30). | ||
01 | BB. | ||
02 ПТР Ш 99. | |||
01 | CC. | ||
02 C1 Ш XX ПОВТОРЯЕТСЯ 10 РАЗ. | |||
01 | Д Ш ХХ | ||
01 | Е Ш Х(30). | ||
РАЗДЕЛ ПРОЦЕДУР. | |||
РАЗОБРАТЬ А ОГРАНИЧИВАЯСЬ С1 (ПТР) В BB, E | |||
УКАЗАТЕЛЬ ПТР. |
Согласно правилам ГОСТ 22558 ограничитель С1 (PTR) (C1 (ПТР)) будет опять рассматриваться перед перемещением второй строки в Е, в то время как по новым правилам в настоящем стандарте Кобола C1 (PTR) (C1 (ПТР)) рассматривается только один раз перед просмотром пересылаемых полей. Таким образом, ограничители никогда не меняются во время всего процесса разбора.
Хотя по ГОСТ 22558 любое индексирование, связанное с ограничителем, вычисляется непосредственно перед пересылкой данного в соответствующее данное, это приводит к ошибке, поскольку ограничитель должен быть определен до просмотра пересылаемого поля, и поэтому не может вычисляться непосредственно перед пересылкой. Таким образом, это изменение в установленных правилах позволяет вычисление ограничителей в соответствующее время так, как это делают некоторые имеющиеся реализации при обработке оператора UNSTRING (РАЗОБРАТЬ).
Для того чтобы эти изменения повлияли на программу, идентификатор в варианте INTO (В) оператора UNSTRING (РАЗОБРАТЬ) должен перекрывать индекс ограничителя. Такое программирование некорректно и это изменение отразится только на немногих программах, если таковые имеются.
(35) Оператор WRITE (ПИСАТЬ) (2 ПОД).
В одном и том же операторе WRITE (ПИСАТЬ) не могут быть одновременно определены фразы ADVANCING PAGE (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ СТРАНИЦЫ) и END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ).
Обоснование
В ГОСТ 22558 допускается указание обеих фраз в одном и том же операторе WRITE (ПИСАТЬ). Тем не менее нет правил, определяющих порядок их обработки. Следовательно, обработка определяется реализацией.
Обе фразы ADVANCING PAGE (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ СТРАНИЦЫ) и END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) позволяют управлять вертикальным позиционированием печатаемой страницы. Продвижение страницы средствами фразы ADVANCING PAGE (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ СТРАНИЦЫ) осуществляется в соответствии с техникой, определяемой реализацией. В то же время продвижение страницы средствами фразы END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) является техникой, определяемой пользователем. Поэтому было решено разделить эти разные техники.
Хотя допускалось одновременное использование этих вариантов соответственно ГОСТ 22558, этим пользовались мало реализаций. Поэтому на имеющиеся программы это изменение повлияет в минимальной степени.
(36) Указатель позиции файла (1 ПОД, 1 ОТД, 1 ИПД). Понятие указателя текущей записи в ГОСТ 22558 изменено на указатель позиции файла.
Обоснование
В настоящем стандарте Кобола правила, основанные на указателе позиции файла, усилены и облегчены для понимания. Кроме того, для сочетания обновления и операторов READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ) указатель текущей записи в ГОСТ 22558 сложен и не всегда приводил к интуитивно ожидаемому результату. Правила указателя текущей записи также недостаточно определены в отдельных случаях, когда указываемая запись становится недоступной.
Это изменение в понятиях может повлиять на программы только в двух случаях, описанных в пунктах (37 и 38). Они могут встретиться только в очень необычной последовательности операций над файлами при динамическом доступе.
(37) Указатель позиции файла (2 ОТН, 2 ИПД). Для относительного или индексного файла при динамическом доступе выполнение оператора OPEN I-O (ОТКРЫТЬ ВХОДНОЙ-ВЫХОДНОЙ), за которым следуют один или более операторов WRITE (ПИСАТЬ) с последующим оператором READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ), приведет к тому, что оператору READ (ЧИТАТЬ) будет доступна первая запись в файле во время выполнения оператора READ (ЧИТАТЬ).
Обоснование
В ГОСТ 22558 эта последовательность приводит к тому, что оператору READ (ЧИТАТЬ) доступна первая запись во время выполнения оператора OPEN (ОТКРЫТЬ), Если один из операторов WRITE (ПИСАТЬ) вставляет запись с ключом или относительным номером записи ниже, чем любые записи, имеющиеся в файле, оператору READ (ЧИТАТЬ) была бы доступна запись, отличная от первой.
Считается более логичным, чтобы при выполнении первого оператора READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ) после оператора OPEN (ОТКРЫТЬ) доступной записью была бы первая запись в файле во время выполнения оператора READ (ЧИТАТЬ).
Семантика в настоящем стандарте ставит на один уровень ситуацию, возникающую после оператора OPEN (ОТКРЫТЬ), и ситуацию, возникающую после оператора READ (ЧИТАТЬ). В последнем случае, если оператор WRITE (ПИСАТЬ) вставляет запись с ключом таким, что она следует непосредственно за последней прочитанной записью, следующий оператор READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ) получит вставленную запись.
Особенно затруднительна семантика в ГОСТ 22558, когда в дополнение к вставкам начальная первая запись удаляется между оператором OPEN (ОТКРЫТЬ) и оператором READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ).
(38) Указатель позиции файла (2 ИПД). Если дополнительный ключ является ключом ссылки и дополнительный ключ изменяется оператором REWRITE (ОБНОВИТЬ) в значение между текущим значением и следующим значением в файле, следующий оператор READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ) получит ту же запись.
Обоснование
В ГОСТ 22558 следующий оператор READ (ЧИТАТЬ) получил бы запись со следующим значением для того дополнительного ключа до оператора REWRITE (ОБНОВИТЬ).
Логически согласовано, что последующий оператор READ (ЧИТАТЬ) получает "ту же" запись, поскольку эта запись в тот момент является первой имеющейся записью в файле, значение ключа которой больше значения ключа записи, ставшей доступной посредством последнего оператора READ (ЧИТАТЬ). В сущности это не "та же" запись, которая была доступна последнему оператору READ (ЧИТАТЬ), поскольку значение дополнительного ключа и возможно другие значения уже изменены.
Семантика стандарта Кобола для этой ситуации была предметом требований для разъяснения и приведена в документах интерпретации X3J4.
(39) Зарезервированные слова (1 ЯДР). Добавлены следующие зарезервированные слова:
ALPHABET | АЛФАВИТ |
ALPHABETIC-LOWER | СТРОЧНЫЕ |
ALPHABETIC-UPPER | ПРОПИСНЫЕ |
ALPHANUMERIC | БЦ |
ALPHANUMERIC EDITED | БЦР |
ANY | ЛЮБОЕ |
BINARY | ДВОИЧНОЕ |
CLASS | КЛАСС |
COMMON | ОБЩАЯ |
CONTENT | |
CONTINUE | ПРОДОЛЖИТЬ |
CONVERTING | ПРЕВРАЩАЯ |
DAY-OF-WEEK | ДЕНЬ-НЕДЕЛИ |
END-ADD | КОНЕЦ-СЛОЖИТЬ |
END-CALL | КОНЕЦ-ВЫЗВАТЬ |
END-COMPUTE | КОНЕЦ-ВЫЧИСЛИТЬ |
END-DELETE | КОНЕЦ-УДАЛИТЬ |
END-DIVIDE | КОНЕЦ-РАЗДЕЛИТЬ |
END-EVALUATE | КОНЕЦ-ОЦЕНИТЬ |
END-IF | КОНЕЦ-ЕСЛИ |
END-MULTIPLY | КОНЕЦ-УМНОЖИТЬ |
END-PERFORM | КОНЕЦ-ВЫПОЛНИТЬ |
END-READ | КОНЕЦ-ЧИТАТЬ |
END-RECEIVE | КОНЕЦ-ПОЛУЧИТЬ |
END-RETURN | КОНЕЦ-ВЕРНУТЬ |
END-REWRITE | КОНЕЦ-ОБНОВИТЬ |
END-SEARCH | КОНЕЦ-ИСКАТЬ |
END-START | КОНЕЦ-ПОДВЕСТИ |
END-STRING | КОНЕЦ-СОБРАТЬ |
END-SUBTRACT | КОНЕЦ-ОТНЯТЬ |
END-UNSTRING | КОНЕЦ-РАЗОБРАТЬ |
END-WRITE | КОНЕЦ-ПИСАТЬ |
EVALUATE | ОЦЕНИТЬ |
EXTERNAL | ВНЕШНЕЕ |
FALSE | ЛОЖЬ |
GLOBAL | ГЛОБАЛЬНОЕ, ГЛОБАЛЬНО |
INITIALIZE | ИНИЦИИРОВАТЬ |
NUMERIC-EDITED | ЧР |
ORDER | |
OTHER | |
PACKED-DECIMAL | ДЕСЯТИЧНОЕ |
PADDING | |
PURGE | ОЧИСТИТЬ |
REFERENCE | ССЫЛКУ |
REPLACE | ЗАМЕНИТЬ |
STANDARD-2 | СТАНДАРТ-М |
TEST | ПРОВЕРКОЙ |
THEN | ЗАТЕМ |
TRUE | ИСТИНА |
Обоснование
В каждом случае предполагается, что польза, получаемая от дополнительных возможностей, обеспечиваемых добавлением каждого зарезервированного слова, перевешивает неудобства, возникающие из переноса этого слова из сферы слов, определенных пользователем. Предполагается, что применение нового оператора REPLACE (ЗАМЕНИТЬ) смягчит неудобства для имеющихся программ, которые могут использовать любое из новых зарезервированных слов как слово пользователя.
Коснемся некоторых вопросов относительно необходимости того или иного зарезервированного слова. Зарезервированные слова облегчают создание эффективных компиляторов, облегчая синтаксический анализ исходной программы. Синтаксическое распознавание Кобола было бы затруднительным без зарезервированных слов. Рассмотрим следующий фрагмент программы:
ADD A TO В С CONTINUE
СЛОЖИТЬ А С Б Е ПРОДОЛЖИТЬ
Предполагая, что нет зарезервированных слов, невозможно определить, является ли CONTINUE (ПРОДОЛЖИТЬ) принимающим полем для ADD (СЛОЖИТЬ) или оператором CONTINUE (ПРОДОЛЖИТЬ). Также невозможно определить, является ли ТО (С) принимающим полем, и оператор синтаксически неверен.
Если бы в синтаксисе Кобола были ограничители операторов, которые необходимы, приведенный выше пример можно было бы переписать так:
ADD A TO В С; CONTINUE
СЛОЖИТЬ А С Б Е; ПРОДОЛЖИТЬ
где ясно, что CONTINUE (ПРОДОЛЖИТЬ) не является частью оператора ADD (СЛОЖИТЬ). Тем не менее в синтаксисе Кобола нет ограничителей оператора; требование ограничителей добавило бы значительно большую несовместимость.
Другим возможным решением было бы, чтобы компилятор проверял до синтаксического разбора оператора каждое зарезервированное слово, не использовано ли оно как определенное пользователем. Однако это привело бы к большим потерям в терминах сложности компилятора и скорости компилирования.
Добавление нескольких зарезервированных слов для новых возможностей является значительно менее серьезной несовместимостью, чем несовместимость, вызываемая устранением всех зарезервированных слов из Кобола.
Итак, зарезервированные слова продолжают использоваться в новейших языках. Например, Паскаль и Ада, оба развивающиеся и возникшие после Кобола, также используют зарезервированные слова.
(40) Состояние ввода-вывода (1 ПОД, 1 ОТД, 1 ИПД). Добавлены новые значения состояния ввода-вывода.
Обоснование
В стандарте Кобола определены только несколько кодовых условий состояния ввода-вывода. В результате пользователь не мог установить среди многих различных ошибочных условий те, которые он хотел бы обрабатывать разными способами и/или каждая реализация определяла свое множество кодов состояния, которое покрывало разные ситуации разными способами. Кроме того, ГОСТ 22558 оставлял результаты многих ситуаций ввода-вывода неопределенными; это значит, что ГОСТ 22558 устанавливал, что определенные критерии должны выполняться, но не устанавливал, что произойдет, если они не выполнены; таким образом, выполнение программы становилось неопределенным.
Настоящий стандарт Кобола определяет коды состояния для таких неопределенных ситуаций ввода-вывода. Таким образом, пользователь может проверить по этим условиям ошибки стандартным путем и предпринять корректирующее действие для определенных условий ошибки, где это возможно.
В общем, добавления могут повлиять на программы в следующих случаях:
а) если они проверяют специальные значения состояний, определенные реализацией, для выявления условий, определяемых в настоящее время;
б) если они относятся к состоянию успешного завершения для любого из условий, определяемых в настоящее время. (В случаях новых значений состояния ввода-вывода 04, 05 и 07 это влияет только на программы, которые просматривают обе позиции литеры состояния ввода-вывода для проверки на успешное выполнение;
в) если они относятся к некоторым действиям, зависящим от реализации, таким как ненормальное завершение программы, когда возникает некоторое из заново определенных условий.
Это изменение может иметь существенное влияние на те программы, которые проверяют специфические значения состояния ввода-вывода.
Нужно отметить, что предыдущий стандарт Кобола не обеспечивал всех кодов состояния.
Отдельные часто употребляемые значения состояния ввода-вывода описаны в следующих пунктах.
а) Состояние ввода-вывода = 04. Оператор READ (ЧИТАТЬ) выполнен успешно, но длина обрабатываемой записи не соответствует фиксированным свойствам этого файла.
Обоснование
ГОСТ 22558 не определял последствия, если оператору READ (ЧИТАТЬ) доступна запись, содержащая соответственно больше или меньше литер, чем максимум или минимум для этого файла. Поэтому результат чтения такой записи не определен. Новое значение 04 состояния ввода-вывода сообщает пользователю о такой ситуации.
Поскольку настоящий стандарт предупреждает попытку занесения или обновления записи слишком большой или слишком малой, эта ситуация не может встретиться для записей, заносимых программой при реализации настоящего стандарта.
б) Состояние ввода-вывода = 05. Оператор OPEN (ОТКРЫТЬ) выполнен успешно, но необязательного файла, на который ссылаются, нет в наличии во время выполнения оператора OPEN (ОТКРЫТЬ).
Обоснование
Соответственно ГОСТ 22558 об отсутствии необязательного файла программе не сообщается до первого выполнения оператора READ (ЧИТАТЬ) для этого файла. Новое значение состояния ввода-вывода 05 дает определенную и доступную информацию при ссылке на файл в операторе OPEN (ОТКРЫТЬ), позволяя программе предпринимать более конкретные действия соответственно этому условию.
Это может повлиять только на программы, которые используют второй уровень фразы OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) в модуле последовательного ввода-вывода и которые просматривают обе позиции литеры данного состояния ввода-вывода для проверки на успешное завершение оператора OPEN INPUT (ОТКРЫТЬ ВХОДНОЙ).
в) Состояние ввода-вывода = 07. Оператор ввода-вывода выполнен успешно. Тем не менее файл, на который ссылается оператор CLOSE (ЗАКРЫТЬ) с вариантом WITH NO REWIND (БЕЗ ПЕРЕМОТКИ), REEL/UNIT (КАТУШКУ/ТОМ) или FOR REMOVAL (С УДАЛЕНИЕМ), или оператор OPEN (ОТКРЫТЬ) с вариантом NO REWING (БЕЗ ПЕРЕМОТКИ), находится на носителе данных, к которому неприменимо понятие катушка (том).
Обоснование
Соответственно ГОСТ 22558 оператор OPEN (ОТКРЫТЬ) с вариантом NO REWIND (БЕЗ ПЕРЕМОТКИ) может быть использован только для последовательных файлов на одной катушке (томе), и оператор CLOSE (ЗАКРЫТЬ) с вариантом NO REWIND (БЕЗ ПЕРЕМОТКИ), REEL/UNIT (КАТУШКУ/ТОМ) или FOR REMOVAL (С УДАЛЕНИЕМ) неприемлем для файлов, находящихся на носителе, к которому неприменимы понятия катушки и тома. Поэтому для файлов массовой памяти эти образцы операторов OPEN (ОТКРЫТЬ) и CLOSE (ЗАКРЫТЬ) могут рассматриваться в сущности как успешные, если пересмотрены аномалии фраз NO REWIND (БЕЗ ПЕРЕМОТКИ), REEL/UNIT (КАТУШКУ/ТОМ) или FOR REMOVAL (С УДАЛЕНИЕМ). Новое значение 07 состояния ввода-вывода делает возможным успешное завершение, сохраняя в то же время информацию для пользователя, и предоставляя возможность предпринять определенные действия.
г) Состояние ввода-вывода = 14. Попытка выполнения последовательного оператора READ (ЧИТАТЬ) для относительного файла и число значащих цифр в относительном номере записи больше данного относительный ключ, описанного для этого файла.
Обоснование
ГОСТ 22558 устанавливает, что успешное выполнение оператора READ (ЧИТАТЬ) формата 1 для относительного файла обновляет содержимое данного относительный ключ (если он указан) и оно становится равным относительному номеру записи, доступной в этот момент. ГОСТ 22558 не определяет результат, если номер, определенный значащими цифрами относительного номера записи, больше данного относительный ключ. Новое значение 14 состояния ввода-вывода определяет этот результат.
д) Состояние ввода-вывода = 24. Производится попытка писать за пределами внешне определенных границ относительного или индексного файла, или сделана попытка последовательного оператора WRITE (ПИСАТЬ) и число значащих цифр в относительном номере записи больше размера данного относительный ключ, описанного для этого файла.
Обоснование
В ГОСТ 22558 значение состояния ввода-вывода 24 означало только попытку писать за пределами внешне определенных границ относительного или индексного файла. В настоящем стандарте Кобола значение 24 состояния ввода-вывода также включает последовательный оператор WRITE (ПИСАТЬ) для относительного файла, когда число значащих цифр в относительном номере записи больше размера данного относительный ключ, описанного для этого файла.
ГОСТ 22558 устанавливает, что при успешном выполнении оператора WRITE (ПИСАТЬ) для относительного файла относительный номер переданной записи будет помещен в данное относительный ключ (если он указан). Результат не определен, если номер, определяемый значащими цифрами относительного номера записи, больше данного относительный ключ.
Это изменение может повлиять только на те программы, которые последовательно записывают больше записей, чем максимальное значение, допускаемое шаблоном данного относительный ключ.
е) Состояние ввода-вывода = 35. Попытка выполнения оператора OPEN (ОТКРЫТЬ) с вариантом INPUT (ВХОДНОЙ) для файла, не определенного как необязательный, которого нет в наличии.
Обоснование
ГОСТ 22558 требует обязательного указания фразы OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) для входных файлов, которые могут отсутствовать в определенные моменты выполнения объектной программы. При этом не определено, что может случиться, когда файл, не объявленный необязательным, отсутствует. Новое значение 35 состояния ввода-вывода позволяет пользователю проверять это условие.
ж) Состояние ввода-вывода = 37. Попытка выполнения оператора OPEN (ОТКРЫТЬ) для файла, который должен быть файлом массовой памяти, но не является таковым.
Обоснование
Это новое значение состояния ввода-вывода сообщает, что: (1) предпринята попытка выполнения оператора OIPEN I-O (ОТКРЫТЬ ВХОДНОЙ-ВЫХОДНОЙ) для файла не массовой памяти, или (2) предпринята попытка выполнения оператора OPEN (ОТКРЫТЬ) для файла не-массовой памяти, объявленного в программе как относительный или индексный файл.
ГОСТ 22558 не определяет, что происходит при таких обстоятельствах. Новое значение 37 состояния ввода-вывода позволяет пользователю проверять это условие ошибки.
Некоторые реализации обеспечивают расширение использования операторов OPEN I-O (ОТКРЫТЬ ВХОДНОЙ-ВЫХОДНОЙ) для доступа к терминалам. Такое расширение может быть устранено новым значением 37 состояния ввода-вывода.
з) Состояние ввода-вывода = 38. Попытка выполнения оператора OPEN (ОТКРЫТЬ) для файла, предварительно закрытого с замком.
Обоснование
ГОСТ 22558 указывает, что реализация должна обеспечить, чтобы файл, закрытый с замком, не мог быть открыт опять во время текущего выполнения единицы исполнения, но не определяет, что случится, если сделана попытка вновь открыть этот файл. Новое значение 38 состояния ввода-вывода позволяет пользователю проверять это условие.
и) Состояние ввода-вывода = 39. Оператор OPEN (ОТКРЫТЬ) неуспешен из-за конфликтных свойств файла (несоответствие между фиксированными свойствами файла и свойствами файла, указанными в программе).
Обоснование
Фиксированные свойства файла - это свойства, отмеченные при создании файла и которые не могут изменяться на протяжении жизненного цикла файла. К этим свойствам (атрибутам) относятся организация, кодовый набор, минимальный и максимальный размер логической записи, тип записи (фиксированной или переменной длины) коэффициент блокирования, литера заполнитель и ограничитель записи. Для индексных файлов (только для них) дополнительными фиксированными свойствами файла являются основной ключ записи, дополнительный ключ записи и основная последовательность ключей.
ГОСТ 22558 указывает, что организация файла устанавливается во время создания файла и в дальнейшем не может быть изменена. Определяется также для оператора OPEN INPUT (ОТКРЫТЬ ВХОДНОЙ), OPEN I-O (ОТКРЫТЬ ВХОДНОЙ-ВЫХОДНОЙ) или OPEN EXTEND (ОТКРЫТЬ ДОПОЛНЯЕМЫЙ), что описание файла, включающее фразы CODE-SET (АЛФАВИТ), RECORD CONTAINS (В ЗАПИСИ) и BLOCK CONTAINS (В БЛОКЕ), должно быть эквивалентным тому, что используется при создании файла. Возможность указывать литеру заполнитель и ограничитель записи - новые возможности Кобола. Для индексных файлов ГОСТ 22558 указывал, что описания данных и относительное расположение в записи данных ключ записи и дополнительный ключ записи, и число дополнительных ключей записи должны быть такими же, как и при создании файла. ГОСТ 22558 обеспечивает возможность воздействия на основную последовательность, используемую для ключей индексного файла.
ГОСТ 22558 не определяет что произойдет, если фиксированные свойства файла не согласуются со свойствами файла, определяемыми в программе. Новое значение 39 состояния ввода-вывода позволяет пользователю проверять это условие.
к) Состояние ввода-вывода = 42. Попытка выполнения оператора CLOSE (ЗАКРЫТЬ) для файла, который не был открыт.
Обоснование
ГОСТ 22558 не разрешает ссылаться в операторе CLOSE (ЗАКРЫТЬ) на файл, который не был открыт, но не определяет последствий такой ссылки. Новое значение 42 состояния ввода-вывода позволяет пользователю проверять это условие.
л) Состояние ввода-вывода = 43. Для файла массовой памяти при последовательном доступе последним оператором ввода-вывода, выполненным для соответствующего файла до выполнения оператора DELETE (УДАЛИТЬ) или REWRITE (ОБНОВИТЬ), не был успешно выполненный оператор READ (ЧИТАТЬ).
Обоснование
ГОСТ 22558 указывает, что для файла при последовательном доступе последним оператором ввода-вывода, выполненным для файла перед выполнением оператора DELETE (УДАЛИТЬ) или REWRITE (ОБНОВИТЬ), должен быть успешно выполненный оператор READ (ЧИТАТЬ), но не указывает, что случится, если требование не удовлетворено. Новое значение 43 состояния ввода-вывода позволяет пользователю проверять это условие.
м) Состояние ввода-вывода = 44. Имеется нарушение границ из-за попытки обновить запись: (1) или в последовательном файле, (2) или в относительном файле на уровне 1 модуля относительного ввода-вывода, (3) или в индексном файле на уровне 1 модуля индексного ввода-вывода и размер записи не совпадает с размером заменяемой записи.
Обоснование
ГОСТ 22558 указывает, что для оператора REWRITE (ОБНОВИТЬ) число позиций литер в новой записи должно быть равно числу позиций литер в заменяемой записи, но не определяет, что происходит, если это требование не удовлетворено.
Новое значение 44 состояния ввода-вывода позволяет пользователю проверять эти условия.
н) Состояние ввода-вывода = 46. Сделана попытка выполнения последовательного оператора READ (ЧИТАТЬ) для файла, открытого в режиме ввода или ввода-вывода, и не была установлена действительная следующая запись по одной из следующих причин: (1) предшествующий оператор START (ПОДВЕСТИ) неуспешен, (2) предшествующий оператор READ (ЧИТАТЬ) неуспешен, но не привел к условию "в конце", или (3) предшествующий оператор READ (ЧИТАТЬ) привел к условию "в конце".
Обоснование
ГОСТ 22558 указывает, что при этих обстоятельствах выполнение оператора READ (ЧИТАТЬ) неправомочно или его выполнение неуспешно, но не определяет код состояния для указания такой ситуации. Новое значение 46 состояния ввода-вывода обеспечивает пользователю возможность проверять это условие. Состояние ввода-вывода 46 может встретиться только тогда, когда не предпринято никаких корректирующих действий, следующих за предыдущим оператором READ (ЧИТАТЬ) или START (ПОДВЕСТИ).
о) Состояние ввода-вывода = 47. Имеется попытка выполнения оператора READ (ЧИТАТЬ) или START (ПОДВЕСТИ) для файла, не открытого как входной или входной-выходной.
Обоснование
ГОСТ 22558 требует, чтобы ко времени выполнения оператора READ (ЧИТАТЬ) или START (ПОДВЕСТИ) файл был открыт как входной или входной-выходной, но не указывает, что происходит, если требование не удовлетворено. Новое значение 47 состояния ввода-вывода дает возможность пользователю проверять это условие.
п) Состояние ввода-вывода = 48. Попытка выполнения оператора WRITE (ПИСАТЬ): (1) или для последовательного файла, не открытого для вывода или дополнения, (2) или для относительного или индексного файла, не открытого для ввода-вывода, вывода или дополнения.
Обоснование
ГОСТ 22558 требует, чтобы файл был открыт в одном из определенных режимов, но не определяет, что происходит, если требование не удовлетворено. Новое значение 48 состояния ввода-вывода позволяет пользователю проверять это условие.
р) Состояние ввода-вывода = 49. Попытка выполнения оператора DELETE (УДАЛИТЬ) или REWRITE (ОБНОВИТЬ) для файла, не открытого для ввода-вывода.
Обоснование
ГОСТ 22558 требует, чтобы файл был открыт для ввода-вывода, но не определяет, что происходит, если требование не удовлетворено. Новое значение 49 состояния ввода-вывода дает пользователю возможность проверять это условие.
(41) Ключ состояния коммуникации (1 КОМ).
Добавлены новые значения ключа состояния коммуникации.
Обоснование
ГОСТ 22558 оставляют результаты некоторых ситуаций коммуникации неопределенными. Настоящий стандарт определяет новые значения ключа состояния коммуникации для этих ситуаций с тем, чтобы пользователь мог выявить эти условия ошибки стандартным путем и таким образом предпринять корректирующие действия, подходящие для данного случая.
Новые значения ключа состояния коммуникации влияют только на те существующие программы, которые располагают некоторыми другими действиями, имеющими место, когда встречаются вновь определяемые условия ошибки.
Конкретные добавленные значения ключа состояния коммуникации описаны ниже.
а) Ключ состояния коммуникации = 15. Символический источник, или одна или несколько очередей или адресаты уже запрещены/разрешены.
Обоснование
Если ко времени выполнения оператора DISABLE (ЗАПРЕТИТЬ) или ENABLE (РАЗРЕШИТЬ) источник, очередь или адресат уже запрещен или разрешен соответственно, спецификации ГОСТ 22558 подразумевают, что значение ключа состояния коммуникации полагается равным 00 (нулю). Новое значение 15 ключа состояния коммуникации обеспечивает пользователя этой информацией.
б) Ключ состояния коммуникации = 21. Символический источник неизвестен.
Обоснование
В ГОСТ 22558 для того, чтобы определить, известно ли символическое имя исходного терминала системе управления сообщениями при выполнении оператора RECEIVE (ПОЛУЧИТЬ), пользователь должен сравнивать данное символический-источник с пробелами. ГОСТ 22558 не определяет, что произойдет, если символический источник в CD (OК), на который имеется ссылка в операторе ЕNАВLЕ (РАЗРЕШИТЬ) или DISABLE (ЗАПРЕТИТЬ), неизвестен. Новое значение 21 ключа состояния коммуникации предоставляет такую информацию.
в) Ключ состояния коммуникации = 65. Превышена вместимость выходной очереди.
Обоснование
ГОСТ 22558 не определяет, что произойдет, если превышена вместимость выходной очереди при выполнении оператора SEND (ПОСЛАТЬ). Такая ситуация теперь определяется заданием нового значения 65 ключа состояния коммуникации.
г) Ключ состояния коммуникации = 70. Один или несколько адресатов не содержат соотнесенных им порций.
Обоснование
Это значение ключа состояния коммуникации возникает только при новом операторе PURGE (ОЧИСТИТЬ). Таким образом оно не может встретиться в программах, соответствующих ГОСТ 22558.
д) Ключ состояния коммуникации = 80. Встретилась комбинация по крайней мере двух условий ключа состояния 10, 15 и 20.
Обоснование
Если использована возможность нескольких адресатов и один из адресатов запрещен, в то время как другой адресат неизвестен, ГОСТ 22558 не определяет, будет ли ключ состояния установлен оператором SEND (ПОСЛАТЬ) на значение 10 или 20. Новое значение 80 ключа состояния коммуникации установлено для определения такой ситуации. Новое значение 80 ключа состояния коммуникации также устанавливается в случае оператора ENABLE (РАЗРЕШИТЬ) или DISABLE (ЗАПРЕТИТЬ), где встречаются и новое условие ключа состояния коммуникации 15 и условие ключа состояния коммуникации 20.
е) Ключ состояния коммуникации = 9х. Состояние, определяемое реализацией.
Обоснование
Этот новый диапазон значений ключа состояния коммуникации позволяет реализации определять множество различных условий ошибки. Это предоставляет возможность пользователю проверять условия ошибки, определяемые реализацией, подобно возможности ГОСТ 22558 для проверки значений состояния ввода-вывода для ошибок ввода-вывода, определяемых реализацией.
(42) Ключ ошибки коммуникации (1 КОМ). Добавлены новые значения ключа ошибки коммуникации. Эти новые значения описаны ниже.
а) Значение ключа ошибки коммуникации = 2. Символический адресат запрещен.
Обоснование
Был выполнен оператор SEND (ПОСЛАТЬ) и адресат, к которому относится этот ключ ошибки, запрещен. В ГОСТ 22558 это условие не распознавалось пользователем.
б) Значение ключа ошибки коммуникации = 5. Символический адресат уже разрешен (запрещен).
Обоснование
Был выполнен оператор ENABLE (РАЗРЕШИТЬ) или DISABLE (ЗАПРЕТИТЬ) и адресат, к которому относится этот ключ ошибки, уже разрешен (запрещен). В ГОСТ 22558 это условие не распознавалось пользователем.
в) Значение ключа ошибки коммуникации = 6. Превышена вместимость выходной очереди.
Обоснование
Был выполнен оператор SEND (ПОСЛАТЬ) и система управления сообщениями не смогла включить в очередь сообщение, сегмент сообщения или порцию сообщения или сегмента сообщения, поскольку выходная очередь адресата, к которому относится это значение ключа ошибки коммуникации, заполнена. В ГОСТ 22558 это условие пользователем не распознавалось.
г) Значение ключа ошибки коммуникации = А до Z. Условие, определяемое реализацией.
Обоснование
Система управления сообщениями получила определенное реализацией условие ошибки, не входящее в имеющиеся значения ключа ошибки коммуникации. Согласно ГОСТ 22558 реализация не могла предоставить пользователю такую информацию.
ПРИЛОЖЕНИЕ 2
СПИСКИ ЭЛЕМЕНТОВ ЯЗЫКА
1. Список устаревших элементов языка
Назначение категории устаревших элементов языка - ограничить влияние удаляемых средств, которые рассматриваются как устаревшие или не должным образом определенные и будут удалены в следующей редакции стандарта. Хотя элементы этой категории устаревшие, немедленное удаление их из стандарта принесло бы неудобства пользователям. Средства, отнесенные к категории устаревших элементов, имеют следующие характеристики:
* элементы языка, которые подлежат удалению из стандарта Кобола, определяются в настоящем стандарте как устаревшие элементы языка (до их удаления);
* взаимоотношение между устаревшими элементами и другими элементами языка не определено, если только не оговорено другое;
* устаревшие элементы языка будут удалены в следующей редакции стандарта;
* требуется, чтобы соответствующая стандарту реализация Кобола поддерживала устаревшие элементы языка для подмножеств и уровней необязательных модулей, для которых объявлена поддержка.
Далее следует список элементов языка, объявляемых в настоящем стандарте устаревшими. Для каждого элемента списка приводится обоснование отнесения этого элемента к категории устаревших элементов.
(1) Замена литеры двумя литерами (1 ЯДР). Если набор литер состоит менее чем из 51 (72) литер, вместо одной литеры могут представляться две литеры. Эта возможность отнесена к категории устаревших элементов.
Обоснование
Эта спецификация привнесена с тех времен, когда оборудование не могло обеспечить полный набор литер Кобола. Такое ограничение на количество литер, допускаемых оборудованием, больше не существует.
(2) ALL литерал (ВСЕ литерал) и числовое или числовое редактируемое данное (2 ЯДР). Стандартная константа ALL литерал (ВСЕ литерал), когда она связана с числовым или числовым редактируемым данным и когда длина литерала больше единицы, относится к категории устаревших элементов.
Обоснование
Причиной считать этот элемент устаревшим послужило то, что результат перемещения ALL литерал (ВСЕ литерал) в числовое данное часто непредсказуем. Например, соответственно интерпретации, операторы
01 A PIC 99V99. | 01 А Ш 99Т99. |
………………… | ………………… |
MOVE ALL "99" ТО А. | ПОМЕСТИТЬ ВСЕ "99" В А. |
MOVE ALL "123" ТО А. | ПОМЕСТИТЬ ВСЕ "123" В А. |
дадут соответственно значения 99.00 и 31.00.
(3) Параграфы AUTHOR (АВТОР), INSTALLATION (ПРЕДПРИЯТИЕ), DATE-WRITTEN (ДАТА-НАПИСАНИЯ), DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) и SECURITY (ПОЛНОМОЧИЯ) (1 ЯДР). Эти параграфы раздела оборудования отнесены к категории устаревших элементов.
Обоснование
Назначение параграфов AUTHOR (АВТОР), INSTALLATION (ПРЕДПРИЯТИЕ), DATE-WRITTEN (ДАТА-НАПИСАНИЯ), DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) и SECURITY (ПОЛНОМОЧИЯ) может быть достигнуто посредством использования строк комментария в разделе идентификации, поскольку эти параграфы не влияют на работу Кобол-программы.
Чистка и регуляризация языка Кобол достигается объявлением устаревшими многих определяемых реализацией элементов. Форматы параграфов DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) и SECURITY (ПОЛНОМОЧИЯ) являются примером параграфов статьи-комментария, определяемых реализацией.
Взаимодействие оператора COPY (КОПИРОВАТЬ) со статьями комментариев в параграфах AUTHOR (АВТОР), INSTALLATION (ПРЕДПРИЯТИЕ), DATE-WRlTTEN (ДАТА-НАПИСАНИЯ), DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) и SECURITY (ПОЛНОМОЧИЯ) часто неоднозначно, например, наличие слова COPY (КОПИРОВАТЬ) в статье-комментарии и использование оператора COPY (КОПИРОВАТЬ) в статье-комментарии.
(4) Фраза MEMORY SIZE (РАЗМЕР ПАМЯТИ) (1 ЯДР).
Фраза MEMORY SIZE (РАЗМЕР ПАМЯТИ) параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) отнесена к категории устаревших элементов языка.
Обоснование
Эта анахроническая возможность языка сохранилась с того времени, когда многие системы требовали определения размера памяти для загрузки единицы исполнения. Емкость памяти для семейства главных моделей часто колебалась от 8К до 64К максимум. Кобол-программы используют фразу MEMORY SIZE (РАЗМЕР ПАМЯТИ) для генерирования объектов для специальных моделей.
Эта возможность рассматривается как функция операционной системы в современной вычислительной среде. В стандарте Кобола фраза MEMORY SIZE (РАЗМЕР ПАМЯТИ) необязательна. Таким образом нет стандартных соответствующих реализаций Кобола, требующих использования фразы MEMORY SIZE (РАЗМЕР ПАМЯТИ) для определения размера памяти объектной машины.
(5) Фраза RERUN (ПЕРЕПРОГОН) (1 ПОД, 1 ОТД, 1 ИПД). Фраза RERUN (ПЕРЕПРОГОН) параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) отнесена к категории устаревших элементов.
Обоснование
Обеспечиваются семь форм фразы RERUN (ПЕРЕПРОГОН). Требуется, чтобы реализация поддерживала по крайней мере одну из них.
Эта возможность рассматривается как функция операционной системы в современной вычислительной среде.
Фраза RERUN (ПЕРЕПРОГОН) обеспечивает только наполовину возможности перепрогона/рестарта. То есть синтаксис и семантика для рестарта не определены. Из-за разнообразия форм фразы RERUN (ПЕРЕПРОГОН) нет гарантии, что программа, использующая эту фразу, будет переносимой (мобильной).
(6) Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) (2 ПОД, 1 ГОТ). Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) раздела оборудования отнесена к категории устаревших элементов.
Обоснование
Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) могла бы быть функцией операционной системы, а не отдельной Кобол-программы. Поэтому фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) отнесена к категории устаревших элементов.
(7) Фраза LABEL RECORDS (МЕТКИ) (1 ПОД, 1 ОТД, 1 ИПД, 1 ГОТ). Фраза LABEL RECORDS (МЕТКИ) статьи описания файла отнесена к категории устаревших элементов и рассматривается как необязательная фраза.
Обоснование
Фраза LABEL RECORDS (МЕТКИ) рассматривается как необязательная фраза категории устаревших элементов. Определение наличия меток файла рассматривается как функция операционной системы и поэтому не относится к Кобол-программе.
(8) Фраза VALUE OF (ЗНАЧЕНИЕ) (1 ПОД, 1 ОТД, 1 ИПД, 1 ГОТ). Фраза VALUE OF (ЗНАЧЕНИЕ) статьи описания файла отнесена к категории устаревших элементов.
Обоснование
Описание элементов метки файла рассматривается как функция операционной системы и не относится к Кобол-программе. Поэтому фраза VALUE OF (ЗНАЧЕНИЕ) отнесена к категории устаревших элементов.
(9) Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) (1 ПОД, 1 ОТД, 1 ИПД). Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) статьи описания файла отнесена к категории устаревших элементов.
Обоснование
Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) избыточна и может привести к несоответствию документации.
(10) Оператор ALTER (ИЗМЕНИТЬ) (1 ЯДР).
Оператор ALTER (ИЗМЕНИТЬ) отнесен к категории устаревших элементов.
Обоснование
Использование в программе оператора ALTER (ИЗМЕНИТЬ) приводит к затруднению понимания программы и ее поддержки. Оператор ALTER (ИЗМЕНИТЬ) не имеет уникального назначения, поскольку оператор GO TO DEPENDING (ПЕРЕЙТИ В ЗАВИСИМОСТИ ОТ) служит для той же цели.
(11) Фраза KEY (КЛЮЧ) оператора DISABLE (ЗАПРЕТИТЬ) (2 КОМ). Фраза KEY (КЛЮЧ) оператора DISABLE (ЗАПРЕТИТЬ) отнесена к категории устаревших элементов и рассматривается как необязательная фраза.
Обоснование
Фраза KEY (КЛЮЧ) оператора DISABLE (ЗАПРЕТИТЬ) используется как парольное средство доступа для оператора DISABLE (ЗАПРЕТИТЬ). Тем не менее не указаны правила для определения, когда значение в фразе KEY (КЛЮЧ) соответствует системному паролю, вследствие чего ситуация определяется реализацией. Таким образом, функция, обеспечиваемая фразой KEY (КЛЮЧ), немобильна.
(12) Фраза KEY (КЛЮЧ) оператора ENABLE (РАЗРЕШИТЬ) (2 КОМ). Фраза KEY (КЛЮЧ) оператора ENABLE (РАЗРЕШИТЬ) отнесена к категории устаревших элементов и рассматривается как необязательная фраза.
Обоснование
Фраза KEY (КЛЮЧ) оператора ENABLE (РАЗРЕШИТЬ) используется как парольное средство доступа для оператора ENABLE (РАЗРЕШИТЬ). Тем не менее правила для определения, когда значение в фразе KEY (КЛЮЧ) соответствует системному паролю, не указаны, вследствие чего ситуация определяется реализацией. Таким образом, функция, обеспечиваемая фразой KEY (КЛЮЧ), немобильна.
(13) Оператор ENTER (ВОЙТИ) (1 ЯДР). Оператор ENTER (ВОЙТИ) отнесена к категории устаревших элементов.
Обоснование
Оператор ENTER (ВОЙТИ) был предвестником оператора CALL (ВЫЗВАТЬ) и вызова внешних подпрограмм. Оператор ENTER (ВОЙТИ) не обеспечивает мобильность, поскольку является необязательным и определяется реализацией; поэтому оператор ENTER (ВОЙТИ) не является хорошим объектом для стандартизации.
(14) Необязательность имени-процедуры-1 в операторе GO TO (ПЕРЕЙТИ К) (2 ЯДР). Необязательность имени-процедуры-1 в операторе GO ТО (ПЕРЕЙТИ К) отнесено к категории устаревших элементов.
Обоснование
Необязательность имени-процедуры-1 в операторе GO TO (ПЕРЕЙТИ К) зависит от оператора ALTER (ИЗМЕНИТЬ). Если имя-процедуры-1 не указано в формате 1 оператора GO TO (ПЕРЕЙТИ К), то оператор ALTER (ИЗМЕНИТЬ), ссылающийся на этот оператор GO TO (ПЕРЕЙТИ К), должен быть выполнен до выполнения оператора GO TO (ПЕРЕЙТИ). Поскольку оператор ALTER (ИЗМЕНИТЬ) отнесен к категории устаревших элементов языка, необязательность имени-процедуры-1 в операторе GO TO (ПЕРЕЙТИ К) также отнесена к категории устаревших элементов.
(15) Фраза REVERSED (PEBEPCHO) оператора OPEN (ОТКРЫТЬ) (2 ПОД). Фраза REVERSED (PEBEPCHO) оператора OPEN (ОТКРЫТЬ) отнесена к категории устаревших элементов.
Обоснование
Последовательный файл может быть открыт для ввода с чтением в обратном порядке. Оборудование, необходимое для обеспечения таких действий, используется не очень широко. Следовательно, это средство редко реализуется и не является хорошим объектом для стандартизации. Поскольку это средство из списка средств, зависящих от оборудования, оно является необязательным и может быть по желанию реализовано или не реализовано.
(16) Оператор STOP литерал (ОСТАНОВИТЬ литерал) (1 ЯДР). Вариант литерал оператора STOP (ОСТАНОВИТЬ) отнесен к категории устаревших элементов.
Обоснование
Общее правило (4) оператора STOP (ОСТАНОВИТЬ) гласит: "Если указан вариант STOP литерал-1 (ОСТАНОВИТЬ литерал-1), выполнение единицы исполнения приостанавливается, а литерал-1 сообщается оператору. Продолжение функционирования единицы исполнения начинается со следующего выполнимого оператора в том случае, когда подключена зависящая от реализации процедура управления возобновлением единицы исполнения".
Назначение оператора STOP литерал (ОСТАНОВИТЬ литерал) по существу определяется реализацией и поэтому программы, использующие его, немобильны.
(17) Модуль сегментации. Модуль сегментации отнесен к категории устаревших элементов.
Обоснование
К настоящему моменту функция, обеспечиваемая модулем сегментации, обеспечивается на уровне операционной системы, внешнем по отношению к исходному коду Кобола. Поэтому средства сегментации остаются в настоящем стандарте как устаревший элемент, подлежащий удалению в следующей редакции стандарта.
Решение сделать модуль сегментации необязательным позволяет имеющимся реализациям по-прежнему предлагать это средство с целью совместимости, не вынуждая при этом новые реализации обеспечивать средства, базирующиеся на устаревшей технологии.
(18) Модуль отладки. Модуль отладки отнесен к категории устаревших элементов.
Обоснование
К настоящему моменту функция, обеспечиваемая модулем отладки, зачастую обеспечивается средством диалоговой отладки, не требующим исходных операторов Кобола. Поэтому средства отладки остаются в настоящем стандарте как устаревший элемент, подлежащий удалению в следующей редакции стандарта.
Решение сделать модуль отладки необязательным позволяет имеющимся реализациям по-прежнему предлагать это средство с целью совместимости, не вынуждая при этом новые реализации обеспечивать средства, базирующиеся на устаревшей технологии.
2. Список элементов языка, определяемых реализацией
Ниже следует список элементов языка настоящего стандарта, для которых спецификация синтаксиса или правил доопределяется в реализации.
(1) Системное-имя. Правила образования системного-имени определяются реализацией (см. ч.4, п.4.2.2.1.2).
(2) Представление данных. Выбор основания системы счисления обычно зависит от арифметических возможностей вычислительной машины (см. ч.4, п.4.3.4).
(3) Алгебраический знак. Если не использована фраза SIGN (ЗНАК), знаки числа будут представлены так, как это определяет реализация (см. ч.4, п.4.3.5).
(4) Выравнивание данных. Каждая реализация, обеспечивающая специальные типы выравнивания, должна описать действие неявного заполнителя и семантику операторов, ссылающихся на содержащие его группы (см. ч.4, п.4.3.7).
(5) Внешний переключатель. Внешний переключатель является устройством оборудования или программным средством, определяемым и именуемым реализацией (см. ч.4, п.4.5).
(6) Внешний переключатель. Реализация определяет область действия (программа, единица исполнения и т.п.) каждого внешнего переключателя и возможности (внешние по отношению к Коболу), используемые для изменения состояния внешнего переключателя (см. ч.4, п.4.5).
(7) Область В. Область В занимает конечное число позиций литер, определяемое реализацией (см. ч.4, п.7.2).
(8) Имя-машины в параграфе SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА). Имя-машины является системным-именем, поэтому правила образования имени-машины определяются реализацией (см. ч.6, п.4.3.3, синтаксическое правило (1)).
(9) Имя-машины в параграфе OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА). Имя-машины является системным-именем, поэтому правила образования имени-машины определяется реализацией (см. ч.6. п.4.4.3, синтаксическое правило (1)).
(10) Фраза MEMORY SIZE (РАЗМЕР ПАМЯТИ).
Если подмножество, задаваемое пользователем, меньше минимальной конфигурации, требуемой для выполнения объектной программы, необходимые меры определяются реализацией (см. ч.6, п.4.4.4, общее правило (1)).
(11) Программная основная последовательность.
При отсутствии фразы PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ) используется внутренняя основная последовательность (см. ч.6, п.4.4.4, общее правило (6)).
(12) Имя-реализации в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА). Имя-реализации является системным именем, поэтому правила образования имени-реализации определяются реализацией (см. ч.6, п.4.5.2).
(13) STANDARD-1 (СТАНДАРТ-А) во фразе ALPHABET (АЛФАВИТ). Если между отдельными литерами стандартного и внутреннего наборов отсутствует соответствие и оно никак не определено, это соответствие определяется реализацией (см. ч.6, п.4.5.4, общее правило 4а).
(14) Имя-реализации во фразе ALPHABET (АЛФАВИТ).
Если задана фраза имя-реализации-2, набор кодов литер или соответствующая основная последовательность определяется реализацией. Реализация также определяет соответствие между литерами или литерой набора кодов, специфицированного фразой имя-реализации-2, и внутренним набором кодов литер (см. ч.6, п.4.5.4, общее правило 4в).
(15) Фраза RERUN (ПЕРЕПРОГОН). Реализация должна обеспечивать хотя бы один вариант фразы RERUN (ПЕРЕПРОГОН) (см. ч.7, п.2.12.4, общее правило (2)).
(16) Фраза RECORD (В ЗАПИСИ). Если в статье описания записи не указана фраза RECORD (В ЗАПИСИ) или если во фразе RECORD (В ЗАПИСИ) указан диапазон позиций литер, реализация определяет, какой получается тип записей - переменной длины или фиксированной длины (см. ч.2, п.2.1.4.3).
(17) Фраза INDEXED BY (ИНДЕКСИРУЕТСЯ). Имя-индекса, идентифицируемое в исходной программе посредством фразы INDEXED BY (ИНДЕКСИРУЕТСЯ), не определяется в программе, так как его размещение и формат зависят от машины и, не будучи данными, имена-индексов не могут быть связаны с какой-либо структурой данных (см. ч.6, п.5.8.3, синтаксическое правило (13)).
(18) Фраза SIGN (ЗНАК). Если статья описания числового данного не содержит необязательную фразу SIGN (ЗНАК), а строка литер его шаблона содержит символ S (З), то позиция и представление знака определяется реализацией (см. ч.6, п.5.12.4, общее правило (4)).
(19) Фраза SIGN (ЗНАК). Если вариант SEPARATE CHARACTER (ОТДЕЛЬНО) не указан, представление знака данного определяет реализация (см. ч.6, п.5.12.4, общее правило 5в).
(20) Фраза SYNCHRONIZED (ВЫДЕЛЕНО). Фраза SYNCHRONIZED (ВЫДЕЛЕНО), в котором не указано ни RIGHT (ВПРАВО), ни LEFT (ВЛЕВО), означает, что элементарное данное нужно расположить между естественными границами таким образом, чтобы достичь наиболее эффективного его использования. Особенности размещения определяется реализацией (см. ч.6, п.5.13.4, общее правило (2)).
(21) Фраза SYNCHRONIZED (ВЫДЕЛЕНО). Реализация должна указывать, как обрабатываются элементарные данные, связанные с фразой SYNCHRONIZED (ВЫДЕЛЕНО), в зависимости от: (а) формата внешнего представления содержащих их записей или групп, в описании которых указана фраза SYNCHRONIZED (ВЫДЕЛЕНО); (б) необходимого порождения неявных заполнителей, если элементарное данное, непосредственно предшествующее данному, описание которого содержит фразу SYNCHRONIZED (ВЫДЕЛЕНО), не оканчивается на естественной границе (см. ч.6. п.5.13.4, общее правило (8)).
(22) Фраза SYNCHRONIZED (ВЫДЕЛЕНО). Реализация может задавать автоматическое выравнивание внутри записи для любого внутреннего формата данных, за исключением данных, использование которых указано DISPLAY (ДЛЯ ВЫДАЧИ). Однако запись в целом может быть выделена (см. ч.6, п.5.13.4, общее правило (9)).
(23) Фраза об использовании USAGE IS BINARY (ДВОИЧНОЕ). Каждая реализация определяет точное воздействие фразы BINARY (ДВОИЧНОЕ) на выравнивание и представление данного в памяти машины, включая представление любого алгебраического знака. Реализацией должно быть распределено достаточно памяти для размещения десятичных значений максимального диапазона, определяемого строкой литер шаблона (см. ч.6, п.5.14.4, общее правило (3)).
(24) Фраза об использовании USAGE IS COMPUTATIONAL (ДЛЯ ВЫЧИСЛЕНИЙ). Каждая реализация определяет точное воздействие фразы USAGE IS COMPUTATIONAL (ДЛЯ ВЫЧИСЛЕНИЙ) на выравнивание и представление данного в памяти машины, включая представление алгебраического знака и допустимый диапазон значений данных (см. ч.6, п.5.14.4, общее правило (4)).
(25) Фраза об использовании USAGE IS INDEX (ДЛЯ ИНДЕКСА). Каждая реализация определяет точное воздействие фразы USAGE IS INDEX (ДЛЯ ИНДЕКСА) на выравнивание и представление данного в памяти машины, включая действительные значения, присвоенные номеру вхождения элемента таблицы (см. ч.6, п.5.14.4, общее правило (7)).
(26) Фраза об использовании USAGE IS PACKED-DECIMAL (ДЕСЯТИЧНОЕ). Каждая реализация определяет точное воздействие фразы USAGE IS PACKED-DECIMAL (ДЕСЯТИЧНОЕ) на выравнивание и представление данного в памяти машины, включая представление алгебраического знака. Реализацией должен быть выделен достаточный объем памяти для размещения максимального значения, соответствующего десятичным позициям числа, определяемого строкой литер шаблона (см. ч.6, п.5.14.4, общее правило (9)).
(27) Арифметическое выражение. Каждая реализация указывает способы, используемые в обработке арифметических выражений (см. ч.6, п.6.2.3, правило (6)).
(28) Оператор ACCEPT (ПРИНЯТЬ). Мнемоническое имя в операторе ACCEPT (ПРИНЯТЬ) должно связываться с устройством оборудования (см. ч.6, п.6.5.3, синтаксическое правило (1)).
(29) Оператор ACCEPT (ПРИНЯТЬ). Любое преобразование данных, требуемое при их перемещении с внешнего устройства в данное, представленное идентификатором-1, определяется реализацией (см. ч.6. п.6.5.4, общее правило (1)).
(30) Оператор ACCEPT (ПРИНЯТЬ). Размер одной передачи для каждого устройства оборудования определяется реализацией (см. ч.6, п.6.5.4, общее правило (2)).
(31) Оператор ACCEPT (ПРИНЯТЬ). Если вариант FROM (С) не указан, то используется устройство, определяемое реализацией как стандартное (см. ч.6, п.6.5.4, общее правило (5)).
(32) Оператор ADD (СЛОЖИТЬ). Выделение достаточного поля памяти для выполнения вычислений без потери значащих цифр обеспечивается компилятором (см. ч.6, п.6.6.4, общее правило (4)).
(33) Оператор COMPUTE (ВЫЧИСЛИТЬ). Каждая реализация определяет приемы обработки арифметических выражений (см. ч.6, п.6.8.4, общее правило (3)).
(34) Оператор DISPLAY (ВЫДАТЬ). Мнемоническое-имя в операторе DISPLAY (ВЫДАТЬ) связывается с устройством оборудования (см. ч.6, п.6.10.3, синтаксическое правило (1)).
(35) Оператор DISPLAY (ВЫДАТЬ). Любое преобразование данных, которое может потребоваться при выводе литерала-1 или данного, соотнесенного идентификатору-1, на внешнее устройство, определяется реализацией (см. ч.6, п.6.10.4, общее правило (1)).
(36) Оператор DISPLAY (ВЫДАТЬ). Размер одной передачи для каждого устройства определяется реализацией (см. ч.6, п.6.10.4, общее правило (2)).
(37) Оператор DISPLAY (ВЫДАТЬ). Если не указана фраза UPON (НА), используется стандартное выводное устройство реализации (см. ч.6, п.6.10.4, общее правило (7)).
(38) Оператор ENTER (ВОЙТИ). Имя-языка-1 определяется реализацией (см. ч.6, п.6.12.3, синтаксическое правило (1)).
(39) Оператор SEARCH ALL (ИСКАТЬ ОСОБО). Начальная установка имени-индекса для идентификатора-1 игнорируется и установка имени-индекса меняется в ходе операции поиска способом, определяемым реализацией (см. ч.6, п.6.22.4, общее правило (4)).
(40) Оператор SET (УСТАНОВИТЬ). Каждая реализация определяет, на какие внешние переключатели может ссылаться оператор SET (УСТАНОВИТЬ) (см. ч.6, п.6.23.3, синтаксическое правило (5)).
(41) Оператор STOP литерал (ОСТАНОВИТЬ литерал). Продолжение функционирования единицы исполнения начинается со следующего выполнимого оператора в том случае, когда подключена зависящая от реализации процедура управления возобновлением единицы исполнения (см. ч.6. п.6.24.4, общее правило (4)).
(42) Оператор SUBTRACT (ОТНЯТЬ). Отведение достаточного поля памяти для выполнения вычислений без потери значащих цифр обеспечивается компилятором (см. ч.6, п.6.26.4, общее правило (4)).
(43) Состояние ввода-вывода. Если значение состояния ввода-вывода для операции ввода-вывода указывает критическое состояние ошибки, реализацией определяются действия, которые предпринимаются после выполнения любой применимой по оператору USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ОШИБКИ) процедуры, или, если ни одна такая процедура не применима, после завершения стандартной системной обработки ошибок ввода-вывода (см. ч.7, п.1.3.5; ч.8, п.1.3.4; ч.9, п.1.3.4).
(44) Состояние ввода-вывода. Условие постоянной ошибки остается действующим на все последующие операции ввода-вывода файла до тех пор, пока не будут вызваны определенные реализацией средства для устранения условия постоянной ошибки (см. ч.7, п.1.3.5; ч.8, п.1.3.4; ч.9, п.1.3.4).
(45) Состояние ввода-вывода. Если применимо более одного значения, значение, которое помещается в состояние ввода-вывода, определяется реализацией (см. ч.7, п.1.3.5; ч.8, п.1.3.4; ч.9, п.1.3.4).
(46) Состояние ввода-вывода = 24. Сделана попытка занесения записей в относительный или индексный файл за пределами внешне определенных его границ. Способ определения границ устанавливается реализацией (см. ч.8, п.1.3.4; ч.9, п.1.3.4).
(47) Состояние ввода-вывода = 34. Сделана попытка занесения записи в последовательный файл за пределами внешне определенных границ файла. Способ определения границ устанавливается реализацией (см. ч.7, п.1.3.5).
(48) Состояние ввода-вывода = 9х. Значение 9 состояния ввода-вывода указывает на существование условий, определяемых реализацией. Значение х определяется реализацией (см. ч.7, п.1.3.5; ч.8, п.1.3.4; ч.9, п.1.3.4).
(49) Фраза ASSIGN (НАЗНАЧИТЬ). Значение и правила для допустимого содержимого имени-реализации-1 и значение литерала-1 определяются реализацией (см. ч.7, п.2.3.3, синтаксическое правило (3); ч.9, п.2.3.3, синтаксическое правило (3); ч.8, п.2.3.3, синтаксическое правило (3); ч.13, п.2.3 3, синтаксическое правило (3)).
(50) Фраза ASSIGN (НАЗНАЧИТЬ). Правила корректности имениреализации-1 и литерала-1 определяются реализацией (см. ч.7, 8, 9, 13, п.2.3.4, общее правило 1б).
(51) Фраза ASSIGN (НАЗНАЧИТЬ). Реализация определяет связь между файлом и запоминающей средой, на которую ссылается имя-реализации или литерал (см. ч.7, п.2.3.4, общее правило (3); ч.8, п.2.3.4 общее правило (4); ч.9, п.2.3.4, общее правило (5); ч.13, п.2 3.4, общее правило (3)).
(52) Фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ). Если фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) не задана, значение, используемое для литеры заполнителя, определяется реализацией (см. ч.7, п.2.7.4, общее правило (5)).
(53) Имя-реализации во фразе RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ). Имя-реализации является системным-именем; поэтому правила образования имени-реализации определяются реализацией (см. ч.7, п.2.8.2).
(54) Фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ). Правила корректности имени-реализации во фразе RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) определяются реализацией (см. ч.7, п.2.3.4, общее правило 1в).
(55) Фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ).
Если задано имя-реализации-1, для определения длины записей переменной длины используется метод, определяемый реализацией (см. ч.7, п.2.8.4, общее правило (3)).
(56) Фраза RESERVE (РЕЗЕРВИРОВАТЬ). Если фраза RESERVE (РЕЗЕРВИРОВАТЬ) не указана, количество распределяемых областей ввода-вывода определяется реализацией (см. ч.7, п.2.9.3, общее правило (1)).
(57) Фраза LABEL RECORDS (МЕТКИ). Вариант STANDARD (СТАНДАРТНЫ), указывает, что существуют метки файла или устройства, назначенного файлу, и эти метки соответствуют спецификациям меток, определяемым реализацией (см. ч.7, п.3.6.3, общее правило (2)).
(58) Фраза LABEL RECORDS (МЕТКИ). Если фраза LABEL RECORDS (МЕТКИ) не указана для файла, метки для этого файла должны соответствовать спецификациям меток, определяемых реализацией (см. ч.7, п.3.6.3, общее правило (3)).
(59) Фраза VALUE (ЗНАЧЕНИЕ). Имя-реализации является системным-именем, поэтому правила образования имени-реализации определяются реализацией (см. ч.7, п.3.9.2).
(60) Оператор CLOSE (ЗАКРЫТЬ). Метки обрабатываются в соответствии со стандартной процедурой обработки меток, определенной реализацией. Выполняются операции закрытия, определенные реализацией (см. ч.7, п.4.2.4, общее правило 3В; ч.8, п.4.2.4, общее правило 2А; ч.9, п.4.2.4, общее правило 2А; ч.13, п.4.2.4, общее правило 3В).
(61) Оператор OPEN (ОТКРЫТЬ). Проверка или запись меток осуществляется в соответствии с процедурами, определяемыми реализацией для обработки входных или выходных меток (см. ч.7, п.4.3.4, общее правило (7); ч.8, п.4.4.4, общее правило (7); ч.9, п.4.4.4, общие правила (7) и (14); ч.13, п.4.5.4, общее правило 5а).
(62) Оператор WRITE (ПИСАТЬ). Если указано мнемоническое-имя-1, имя связывается с особым свойством, определяемым реализацией (см. ч.7, п.4.7.3, синтаксическое правило (6)).
(63) Оператор WRITE (ПИСАТЬ). Если указано мнемоническое-имя-1, печатаемая страница продвигается в соответствии с правилами, установленными реализацией для данного устройства (см. ч.7, п.4.7.4, общее правило 15г);
(64) Оператор WRITE (ПИСАТЬ). Если указано PAGE (СТРАНИЦЫ) фразы ADVANCING (ПРОДВИЖЕНИЯ) и в статье описания, связанной с выводимой записью файла, не указана фраза LINAGE (ВЕРСТКА), позиционирование устройства на следующую физическую страницу выполняется в соответствии с правилами, определенными реализацией (см. ч.7, п.4.7.4, общее правило 15з).
(65) Катушка. Размеры катушки определяются реализацией (см. ч.3).
(66) Том (unit). Размер тома определяется реализацией (см. ч.3).
(67) Том (volume). Размер тома определяется реализацией.
(68) Оператор CALL (ВЫЗВАТЬ). Если вызываемая программа не является программой Кобола, правила формирования имени-программы определяются реализацией (см. ч.10, п.5.2.4, общее правило (1)).
(69) Оператор CALL (ВЫЗВАТЬ). Ресурсы вычислительной среды времени выполнения, которые должны проверяться с целью установления доступности вызываемой программы для выполнения, определяются реализацией (см. ч.10, п.5.2.4, общее правило (3)).
(70) Оператор CALL (ВЫЗВАТЬ). Если программа, заданная в операторе CALL (ВЫЗВАТЬ), не может стать доступной для выполнения в это время, и фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) или ON EXCEPTION (ПРИ ОШИБКЕ) не задана, все остальные действия оператора CALL (ВЫЗВАТЬ) определяются реализацией (см. ч.10, п.5.2.4, общее правило (3)).
(71) Оператор CALL (ВЫЗВАТЬ). Если вызываемая программа не является программой на Коболе, использование фразы USING (ИСПОЛЬЗУЯ) определяется реализацией (см. ч.10, п.5.2.4, общее правило (9)).
(72) Фраза SAME SORT/SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ/СОРТИРОВКИ-СЛИЯНИЯ). Особенности размещения не сортируемых и не сливаемых файлов определяются реализацией (см. ч.11, п.2.5.4, общее правило 2б).
(73) Структура записи файла отчетов. В генераторе отчетов структура логической записи файла, соотнесенного имени-файла-1, определяется реализацией (см. ч.13, п.3.2.4, общее правило (2)).
(74) Символическое имя. Символическое имя коммуникационного терминала должно соответствовать правилам образования системных-имен, поэтому образование символического имени определяется реализацией (см. ч.14, п.2.2.4, правило (10)).
(75) Ключ состояния коммуникации = 9х. Значение 9х ключа состояния коммуникации указывает на наличие условия, определяемого реализацией (см. ч.14, п.2.2.5).
(76) Ключ ошибки коммуникации. Значения от А до Z ключа ошибки коммуникации указывают на условия, определяемые реализацией (см. ч.14, п.2.2.6).
(77) Вариант KEY (КЛЮЧ) оператора DISABLE (ЗАПРЕТИТЬ). Пароль встраивается в систему (см. ч.14, п.3.2.4, общее правило (7)).
(78) Вариант KEY (КЛЮЧ) оператора ENABLE (РАЗРЕШИТЬ). Пароль встраивается в систему (см. ч.14, п.3.3.4, общее правило (6)).
(79) Оператор SEND (ПОСЛАТЬ). Если используется вариант мнемоническое-имя, имя идентифицируется специальным средством, определяемым реализацией (см. ч.14, п.3.6.3, синтаксическое правило (4));
(80) Оператор SEND (ПОСЛАТЬ). Если указано мнемоническое-имя-1, литеры, передаваемые на коммуникационное устройство, позиционируются соответственно правилам, определяемым реализацией для этого устройства (см. ч.14, п.3.6.4, общее правило 15в).
3. Список элементов языка, зависящих от оборудования
Ниже приводится список элементов языка настоящего стандарта, зависящих от особенностей компонент оборудования.
(1) Замена двумя литерами зависит от набора литер, допустимого машиной (1 ЯДР).
(2) Фраза об использовании USAGE IS BINARY (ДВОИЧНОЕ) зависит от наличия подходящей машинной архитектуры для двоичного формата данных (1 ЯДР).
(3) Фраза об использовании USAGE IS PACKED-DECIMAL (ДЕСЯТИЧНОЕ) зависит от наличия подходящей машинной архитектуры для упакованного десятичного формата данных (1 ЯДР).
(4) Если позиционирование не применимо на устройстве оборудования, операционная система игнорирует позиционирование при выполнении оператора DISPLAY (ВЫДАТЬ) (1 ЯДР).
(5) Фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) зависит от того, применимы ли литеры заполнители к типу устройства, предназначенного файлу (2 ПОД, 1 ГОТ).
(6) Вариант STANDARD-1 (СТАНДАРТ-А) фразы RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) зависит от типа катушки, устройства (2 ПОД, 1 ГОТ).
(7) Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) зависит от типа катушки устройства (2 ПОД, 1 ГОТ).
(8) Фраза CODE-SET (АЛФАВИТ) зависит от того, может ли поддерживать устройство указанный код (1 ПОД, 1 ГОТ).
(9) Вариант REEL/UNIT (КАТУШКУ/ТОМ) оператора CLOSE (ЗАКРЫТЬ) зависит от типа (катушки или устройства массовой памяти) (1 ПОД, 1 ГОТ).
(10) Вариант FOR REMOVAL (С УДАЛЕНИЕМ) оператора CLOSE (ЗАКРЫТЬ) зависит от типа катушки или устройства массовой памяти (2 ПОД, 1 ГОТ).
(11) Вариант WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) оператора CLOSE (ЗАКРЫТЬ) зависит от типа катушки или типа устройства массовой памяти (2 ПОД, 1 ГОТ).
(12) Оператор DELETE (УДАЛИТЬ) зависит от устройства массовой памяти (1 ОТД, 1 ИПД).
(13) Вариант I-O (ВХОДНОЙ-ВЫХОДНОЙ) оператора OPEN (ОТКРЫТЬ) зависит от типа устройства массовой памяти (1 ПОД, 1 ОТД, 1 ИПД).
(14) Вариант REVERSED (РЕВЕРСНО) оператора OPEN (ОТКРЫТЬ) зависит от типа катушки или устройства массовой памяти, имеющих возможность обеспечивать доступ к записям в обратном порядке (2 ПОД).
(15) Вариант WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) оператора OPEN (ОТКРЫТЬ) зависит от типа катушки или устройства массовой памяти (2 ПОД, 1 ГОТ).
(16) Вариант EXTEND (ДОПОЛНЯЕМЫЙ) оператора OPEN (ОТКРЫТЬ) зависит от типа катушки или устройства массовой памяти (2 ПОД, 2 ОТД, 2 ИПД, 1 ГОТ).
(17) Оператор REWRITE (ОБНОВИТЬ) зависит от типа устройства массовой памяти (1 ПОД, 1 ОТД, 1 ИПД).
(18) Вариант I-O (ВХОДНЫХ-ВЫХОДНЫХ) оператора USE (ИСПОЛЬЗОВАТЬ) зависит от типа устройства массовой памяти (1 ПОД, 1 ОТД, 1 ИПД).
(19) Вариант BEFORE/AFTER (ДО/ПОСЛЕ) оператора WRITE (ПИСАТЬ) зависит от возможности вертикального позиционирования устройства или от действия, базирующегося на мнемоническом-имени (1 ПОД).
(20) Вариант BEFORE/AFTER ADVANCING (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ) оператора SEND (ПОСЛАТЬ) зависит от возможности вертикального позиционирования устройства или от действия, базирующегося на мнемоническом-имени (1 КОМ).
4. Список неопределенных элементов языка
Ниже приводится список не определенных явно элементов языка настоящего стандарта.
(1) Явные и неявные передачи управления. Когда нет следующего выполнимого оператора и управление не передается за пределы Кобол-программы, передача управления в программе не определена, если только выполнение программы не происходит в недекларативной части процедур программы, вызванной оператором CALL (ВЫЗВАТЬ), где выполняется неявный оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) (см. ч.4, п.4.4.2).
(2) Начальные значения данных. Начальное значение любого индексного данного или данного, не связанного с фразой VALUE (ЗНАЧЕНИЕ), не определено (см. ч.6, п.5.2.4).
(3) Вариант DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы OCCURS (ПОВТОРЯЕТСЯ). Значения данных, номера вхождений которых превышают значение данного, на которое ссылается имя-данного-1, не определены (см. ч.6, п.5.8.4, общее правило 2б).
(4) Фраза VALUE (ЗНАЧЕНИЕ) в секции файлов. Начальные значения данных в секции файлов не определено (см. ч.6, п.2.15.6, правило 1а).
(5) Фраза VALUE (ЗНАЧЕНИЕ) в секции рабочей памяти и секции коммуникаций. Если фраза VALUE (ЗНАЧЕНИЕ) не указана для данного в секции рабочей памяти или в секции коммуникаций, значение этого данного не определено (см. ч.6, п.5.15.6, правило 1в).
(6) Вариант ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ). Если фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) не задана и во время выполнения арифметической операции в арифметическом операторе возникает условие переполнения, значения результирующих идентификаторов не определены (см. ч.6, п.6.4.2).
(7) Перекрывающиеся операнды. Если посылаемое и принимающее данное в любом операторе имеют общую часть или всю область памяти, то даже если они не определены в одной статье описания данного, результат выполнения такого оператора не определен (см. ч.6, п.6.4.5).
(8) Несовместимые данные. Если значения данных, к которым происходит обращение в разделе процедур, не соответствуют классу, определенному при описании этих данных с фразой PICTURE (ШАБЛОН), результат обращения не определен. Исключение составляет условие класса (см. ч.6, п.6.4.7).
(9) Оператор SEARCH ALL (ИСКАТЬ ОСОБО). В операторе SEARCH ALL (ИСКАТЬ ОСОБО) результат операции поиска предсказуем только в следующих случаях: (а) данные в таблице упорядочены так же, как это описано в варианте KEY IS (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) фразы OCCURS (ПОВТОРЯЕТСЯ), связанном с идентификатором-1 и (б) значения ключа (ключей), упомянутого во фразе WHEN (КОГДА), достаточны, чтобы однозначно идентифицировать элемент таблицы (см. ч.6, п.6.22.4, общее правило (3)).
(10) Оператор SEARCH ALL (ИСКАТЬ ОСОБО). Если для каждой установки индекса в разрешенном интервале ни одно условие, задаваемое во фразе WHEN (КОГДА), не может быть удовлетворено, то управление передается повелительному-оператору-1 фразы AT END (В КОНЦЕ), если она указана, или на конец оператора SEARCH (ИСКАТЬ), если эта фраза не указана. В любом случае конечная установка индекса не определена (см. ч.6, п.6.22.4, общее правила (4)).
(11) Оператор CLOSE (ЗАКРЫТЬ). Действия оператора CLOSE (ЗАКРЫТЬ) не определены, если метки специфицированы, но в файле отсутствуют, или когда они не специфицированы, но присутствуют (см. ч.7, п.4.2.4, общее правило 3В; ч.8; ч.9, п.4.2.4, общее правило 2А; ч.13, п.4.2.4, общее правило 3В).
(12) Оператор CLOSE (ЗАКРЫТЬ). В случае неуспешного выполнения оператора CLOSE (ЗАКРЫТЬ) доступность области записи не определена (см. ч.7, п.4.2.4, общее правило (6); ч.8 и 9, п.4.2.4, общее правило (5)).
(13) Оператор OPEN (ОТКРЫТЬ). Действия оператора OPEN (ОТКРЫТЬ) не определены, когда метки специфицированы, но отсутствуют, или не специфицированы, но присутствуют (см. ч.7, п.4.3.4, общее правило (7); ч.8 и 9, п.4.4.4, общее правило (7); ч.13, п.4.5.4, общее правило (5)).
(14) Оператор READ (ЧИТАТЬ). По завершении оператора READ (ЧИТАТЬ) значения всех данных, находящихся вне диапазона текущей записи данных, не определены (см. ч.7, п.4.4.4, общее правило (6); ч.8 и 9, п.4.5.4, общее правило (6)).
(15) Оператор READ (ЧИТАТЬ). После неуспешного выполнения оператора READ (ЧИТАТЬ) содержимое соответствующей области записи не определено; для индексных файлов ключ ссылки также не определен (см. ч.7, п.4.4.4, общее правило (12); ч.8 и 9, п.4.5.4, общее правило (12)).
(16) Оператор START (ПОДВЕСТИ). После неуспешного выполнения оператора START (ПОДВЕСТИ) для индексного файла ключ ссылки для этого файла не определен (см. ч.9, п.4.7,4, общее правило (8)).
(17) Оператор WRITE (ПИСАТЬ) (последовательный файл). Если декларатива USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ) не специфицирована явно или неявно для имени-файла, связанного с именем-записи-1, результат не определен при попытке записать запись за внешне определенными границами файла (см. ч.7, п.4.7.4, общее правило 13в).
(18) Вариант ADVANCING (ПРОДВИЖЕНИЯ) оператора WRITE (ПИСАТЬ). Если значение данного, указанного идентификатором-2, отрицательно, при использовании варианта ADVANCING (ПРОДВИЖЕНИЯ) результат не определен (см. ч.17, п.4.7.4, общее правило 15б).
(19) Оператор CALL (ВЫЗВАТЬ) для программ, записанных не на Коболе. Оператор CALL (ВЫЗВАТЬ) может использоваться для вызова программ, записанных в языке, отличном от Кобола, но механизм возврата и передачи межпрограммных данных в настоящем документе не определяются (см. ч.2, п.6.4.1).
(20) Секция связи. Если к данному секции связи обращаются в программе, которая не является вызываемой, результат не определен (см. ч.10, п.4.1).
(21) Оператор MERGE (СЛИТЬ). Если записи файлов, представленных именем-файла-2 и именем-файла-3, не упорядочены в соответствии с фразами ASCENDING (ПО ВОЗРАСТАНИЮ КЛЮЧА) или DESCENDING (ПО УБЫВАНИЮ КЛЮЧА) оператора MERGE (СЛИТЬ), результат слияния не определен (см. ч.11, п.4.1.4, общее правило (6)).
(22) Оператор RETURN (ВЕРНУТЬ). При возникновении условия "в конце" выполнение оператора RETURN (ВЕРНУТЬ) считается неуспешным и содержимое области записи, соответствующей имени-файла-1, не определено (см. ч.11, п.4.3.4, общее правило (2)).
(23) Оператор SORT (СОРТИРОВАТЬ). Если фраза DUPLICATES (С ДУБЛИРОВАНИЕМ) не указана и содержимое всех ключей, связанных с одной записью данных, равно содержимому соответствующих ключей, связанных с одной или несколькими другими записями данных, то порядок возвращения этих записей не определен (см. ч.11, п.4.4.4, общее правило (4)).
(24) Оператор SORT (СОРТИРОВАТЬ). Для файла с относительной организацией, указанного именем-файла-2 во фразе GIVING (ПОЛУЧАЯ), значение данного, являющегося относительным ключом, после выполнения оператора SORT (СОРТИРОВАТЬ) не определено (см. ч.11, п.4.4.4, общее правило 9б).
(25) Статья описания коммуникации. Если система управления сообщениями делает попытку диспетчировать программу, не имеющую фразу INITIAL (НАЧАЛЬНАЯ), результаты не определены (см. ч.14, п.2.2.4, общее правило (7)).
(26) Оператор SEND (ПОСЛАТЬ). При наличии в значении идентификатора-1 специальных символов управления результат выполнения оператора не определен (см. ч.14, п.3.6.4, общее правило (5)).
(27) Оператор SEND (ПОСЛАТЬ). Во время выполнения единицы исполнения расположение части сообщения, которая не заканчивается ЕМ1 (ИКЩ) или EG1 (ИКГ), или не уничтожена выполнением оператора PURGE (ОЧИСТИТЬ), не определено (см. ч.14, п.3.6.4, общее правило (7)).
(28) Оператор SEND (ПОСЛАТЬ). Если значение данного, указанного идентификатором-3, отрицательно, результат не определен (см. ч.14, п.3.6.4, общее правило 15б).
Электронный текст документа
и сверен по:
М.: Издательство стандартов, 1991