ГОСТ 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 (ПРОДВИЖЕНИЯ) позволяют управлять вертикальным позиционированием строки на печатаемой странице. Если фраза ADVANCING (ПРОДВИЖЕНИЯ) не используется, реализацией будет обеспечиваться автоматическое продвижение, как если бы пользователь указал фразу AFTER ADVANCING 1 LINE (ПОСЛЕ ПРОДВИЖЕНИЯ 1 СТРОК). Если фраза 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 (ОБНОВИТЬ), или WRITE (ПИСАТЬ) перед выполнением любого повелительного оператора, связанного с этим оператором ввода-вывода, и перед выполнением любой применимой процедуры USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Значение состояния ввода-вывода доступно Кобол-программе посредством фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) в статье управления файлом.
Состояние ввода-вывода определяет также, будет ли выполняться процедура 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) задана фраза OUTPUT (ВЫХОДНОЙ), а файл не допускает операции записи;
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 (ОБНОВИТЬ), или WRITE (ПИСАТЬ). Когда возникает условие ошибки ключа, оператор ввода-вывода, вызвавший эту ситуацию, является неуспешным и файл не изменяется (пп.4.3, 4.5-4.7, 4.9 настоящей части).
Если условие ошибки ключа возникает после выполнения операции ввода-вывода, определенной в операторе ввода-вывода, то происходит следующие действия в указанном порядке:
(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) Для файла с произвольным доступом логически удаляется из файла запись, идентифицируемая значением данного, определенного как относительный ключ, связанный с именем-файла-1. Если файл не содержит записи с указанным ключом, возникает условие ошибки ключа (см. п.1.3.5 настоящей части).
(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 (ЧИТАТЬ) является неуспешным.
б) Если указатель позиции файла указывает, оператор выполняется согласно общему правилу (10).
в) Если указатель позиции файла был установлен предыдущими операторами 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 (ОБНОВИТЬ) для файлов с произвольным доступом, для которых не определена соответствующая процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
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) Для файла с произвольным доступом система управления массовой памятью логически заменяет запись, которая указывается значением данного относительный ключ имени-файла, связанного с именем-записи-1. Если в файле нет указанной ключом записи, возникает условие ошибки ключа. Если опознано условие ошибки ключа, выполнение оператора 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) Имя-данного-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 (ВЫХОДНОЙ) ко времени выполнения этого оператора (см. п.4.4 настоящей части).
(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);
б) если доступ произвольный относительный номер, который должен быть связан с записью, находящейся в области записи, должен быть помещен перед выполнением оператора WRITE (ПИСАТЬ) в данное, определенное как относительный ключ. При выполнении оператора WRITE (ПИСАТЬ) эта запись передается СУМП:
(12) Если относительный файл открыт как дополняемый, записи включаются в этот файл. Первая запись, переданная системой управления массовой памятью, имеет относительный номер записи на единицу больший, чем наибольший относительный номер записи, существующей в файле. Следующие записи, переданные СУМП, имеют соответственно большие относительные номера записи. Если для файла, связанного с именем-записи-1, указана фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ), во время выполнения оператора WRITE (ПИСАТЬ) относительный номер включаемой записи помещается СУМП в данное, являющееся относительным ключом, согласно правилам для оператора MOVE (ПОМЕСТИТЬ) (см. ч.6, п.6.19). |
(13) Если файл открывается как входной-выходной и доступ произвольный по оператору WRITE (ПИСАТЬ) запись вставляется в этот файл. Относительный номер, который должен быть связан с записью, находящейся в области записи, должен быть помещен перед выполнением оператора WRITE (ПИСАТЬ) в данное, определенное как относительный ключ. При выполнении оператора WRITE (ПИСАТЬ) эта запись передается СУМП.
(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 (ОБНОВИТЬ), или WRITE (ПИСАТЬ) перед выполнением любого повелительного оператора, связанного с этим оператором ввода-вывода, и перед выполнением любой применимой процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Значение состояния ввода-вывода доступно Кобол-программе посредством фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) в статье управления файлом.
Состояние ввода-вывода определяет также, будет ли выполняться процедура 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) задана фраза OUTPUT (ВЫХОДНОЙ), а файл не допускает операций записи;
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 (ОБНОВИТЬ) или WRITE (ПИСАТЬ). Когда возникает условие ошибки ключа, оператор ввода-вывода, вызвавший эту ситуацию, является неуспешным и файл не изменяется (пп.4.3, 4.5-4.7, 4.9 настоящей части).
Если условие ошибки ключа возникает после выполнения операции ввода-вывода, определенной в операторе ввода-вывода, то происходят следующие действия в указанном порядке:
(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 (ДОСТУП), ORGANIZATION IS INDEXED (ОРГАНИЗАЦИЯ ИНДЕКСНАЯ), RECORD KEY (КЛЮЧ ЗАПИСИ).
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) Для индексного файла с произвольным доступом СУМП логически удаляют из файла запись, идентифицируемую значением данного, определенного как основной ключ, связанный с именем-файла-1. Если файл не содержит записи с указанным ключом, возникает условие ошибки ключа (см. п.1.3.5 настоящей части).
(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 (ВЫХОДНОЙ) и I-O (ВХОДНОЙ-ВЫХОДНОЙ) в одной и той же единице исполнения. После первоначального выполнения оператора OPEN (ОТКРЫТЬ) для файла каждому последующему выполнению оператора OPEN (ОТКРЫТЬ) для этого же файла должно предшествовать выполнение для него оператора CLOSE (ЗАКРЫТЬ) .
(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, должен быть открыт как выходной, входной-выходной ко времени выполнения этого оператора (см. п.4.4 настоящей части).
(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 является именем вызываемой программы. Программа, в которой появляется оператор CALL (ВЫЗВАТЬ), является вызывающей программой. Если вызываемая программа - это программа Кобола, то литерал-1 должно быть именем программы, содержащимся в параграфе PROGRAM-ID (ПРОГРАММА) вызываемой программы. Если вызываемая программа - не программа Кобола, правила формирования имени программы определяются реализацией.
(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 (КОПИРОВАТЬ) , не может быть определена до тех пор, пока не будут полностью обработаны все операторы 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 | Символический источник, одна или несколько очередей и адресатов запрещены/разрешены (см. п.2.2.6) | |||||
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 указывает число сообщений, имеющихся в очереди . Система управления сообщениями обновляет это значение при выполнении оператора ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ).
Формат 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) вхождение имени-данного-5 содержит символический адресат, предварительно сообщенный системе управления сообщениями. Имена символических адресатов должны соответствовать правилам образования системных имен.
Соответствие между значением данного имя-данного-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 | Условия, определяемые реализацией |
Символ означает элемент уровня 2, недоступный на уровне 1. |
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) Сообщение передается в область, указанную идентификатором-1, с выравниванием влево; дополнение сообщения до размера области пробелами не производится.
(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) Каждый из имен-процедур может появляться только в одном операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) и только один раз.
(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) Ссылка на имя-процедуры-1 как на уточнитель не является ссылкой на этот элемент для отладки, описанной в вышеперечисленных общих правилах.
(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 (ЗНАЧЕНИЕ ОТЛАДКИ) содержит значение START PROGRAM ("НАЧАЛО ПРОГРАММЫ").
(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 (СОРТИРОВАТЬ) - SORT INPUT ("ВВОД СОРТИРОВКИ");
2) в случае фразы OUTPUT (ПРОЦЕДУРА ВЫВОДА) оператора SORT (СОРТИРОВАТЬ) - SORT OUTPUT ("ВЫВОД СОРТИРОВКИ");
3) в случае фразы OUTPUT (ПРОЦЕДУРА ВЫВОДА) оператора MERGE (СЛИТЬ) - MERGE OUTPUT ("ВЫВОД СЛИЯНИЯ").
(20) Если выполнение отладочной секции вызвано передачей управления имени-процедуры-1 при выполнении оператора PERFORM (ВЫПОЛНИТЬ), то имеет место следующее:
a) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует этот оператор;
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
в) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит PERFORM LOOP ("ЦИКЛ ВЫПОЛНИТЬ").
(21) Если имя-процедуры-1 относится к процедуре, выполнение которой управляется оператором USE (ИСПОЛЬЗОВАТЬ), и наступили условия ее выполнения, то имеет место следующее:
а) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует оператор, выполнение которого повлекло выполнение имени-процедуры-1;
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
в) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит значение USE PROCEDURE ("ПРОЦЕДУРА ИСПОЛЬЗОВАТЬ").
(22) Если неявная передача управления из предыдущего последовательного параграфа к имени-процедуры-1 вызывает выполнение отладочной секции, имеет место следующее:
а) DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует предыдущий оператор;
б) DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
в) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит FALL THROUGN ("ПРОХОДИТ ЧЕРЕЗ").
(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 ГОТ | |
Литеры фиксированной вставки: В + - . , | ||
0 CR (КР) DB (ДБ) / | 1 ЯДР | 1 ЯДР |
1 ГОТ | 1 ГОТ | |
Литера В разрешается в буквенном данном | 1 ЯДР | - |
1 ГОТ | - | |
Литеры замены или плавающей вставки | ||
+ - Z (П) * | 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 ЯДР). Набор литер Кобола расширен включением двоеточия, которое испо