/
Текст
МОСКВА <СТА1ИСТИКА> 1978
ББК 32.973.2
К55
А в т б р ы:
В П. БЫКОВА, Л. К. ЗАГУЗОВА, Л. М. РОМАНОВСКАЯ,
А. А. СЕВАСТЮК, М. В. ХОДОШ
Кобол,ЕС ЭВМ / В. П. Быкова, Л. К. Загузова, Л. М. Ро-
К55 мановская и др. — М.: Статистика, 1978.— 280 с„ ил.
Авт. указ, на обороте тит. л.
В пер.: 1 р. 10 к.
В книге описана система программирования на базе унифицированного язы»
ка Кобол, входящая в состав математического обеспечения ЕС ЭВМ. Авторы
рассматривают средства языка и его возможности применительно к действующим
в настоящее время операционным системам ОС ЕС и ДОС ЕС.
Книга будет полезна программистам, разрабатывающим программы обработ»
ки данных для ЕС ЭВМ. Она может быть использована в качестве учебного по»
собия для подготовки специалистов соответствующего профиля.
ББК 32.973.2
30502—100 •
К008(01)—78 75—78
6Ф7.3
Кобол ЕС ЭВМ
Рецензенты: Л. П. Бабенко, А. М. Кац
Редакторы Л. Д. Григорьева, Л. А. Табакова
Мл. редактор В. К. Капинская х
Техн, редактор Р. Н, Феоктистова
Корректоры Г. В. Хлопцева, Г. И. Терновская
Худ. редактор Т. В. Стихно
Переплет художника Т. М. Погореловой
ИБ № 371
60Х90т/|в|
1
II и—9
Сдано в набор 25.01.78. Подписано в печать 26.06.78. А06979 Формат
Бумага № 3. Лит. гарн. Высокая печать. Объем 17,6 печ. л. Уч,-изд. Л. 19.26
Усл. п. л. 17,5 Тираж 65 000 экз. Зак. 73. Цена 1 р. 10 к.
Издательство «Статистика». Москва, ул. Кирова, 39
Московская типография № 4 Союзполиграфпроиа
при Государственном комитете Совета Министров СССР
по делам издательств, полиграфии и книжной торговли.
Москва, И-41, Б. Переяславская ул., д. 46
© Издательство «Статистика», 1978
ПРЕДИСЛОВИЕ
Эффективное использование ЭВМ в различных областях народного хозяй-
ства в большой степени зависит от оснащения их развитыми системами програм-
мирования иа базе языков высокого уровни. Среди множества известных в на-
стоящее время языков программирования можно выделить языки, которые нашли
широкое применение. Ярким представителем класса таких языков является Кобол,
который широко используется для решения задач обработки данных.
Кобол ориентирован на обработку файлов большого объема, которая ие свя-
зана со сложными вычислениями. Такая обработка типична для задач планового,
экономического и статистического характера. Фразы и операторы языка Кобол,
близкие по форме к естественному языку, позволяют просто и наглядно описы-
вать процедуры обработки данных сложной иерархической структуры. Обладая
достоинствами машинно-независимых языков, Кобол позволяет создавать про-
граммы, которые можно использовать на разных ЭВМ, достаточно только в про-
грамме изменить описание технических средств применяемой ЭВМ.
В целях обеспечения максимальной программной совместимости в Советском
Союзе разработан уйифицированный язык Кобол, согласующийся с международ-
ными стандартами языка. Описание унифицированного языка Кобол быЛо подго-
товлено в Институте кибернетики АН УССР под руководством профессора
Е. Л. Ющенко.
В соответствии с требованиями первоисточника, положенн^р в основу опи-
сания унифицированного языка Кобол, ниже приводится перевод его раздела,
обязательного в качестве части введения к документу:
«Любая организация, заинтересованная в воспроизведении полностью
или частично сообщения и спецификаций Кобола, использоваини идей, взя-
тых из этого сообщения, в качестве основы для учебного пособия или
любой другой цели, может делать это. Однако всем таким организациям
предлагается воспроизвести этот раздел как часть введения к документу.
Пользующимся небольшим отрывком, например, в книжном обзоре, в знак
признательности предлагается упомянуть о Коболе как о первоисточнике,
но ие требуется цитировать этот раздел.
Кобол — производственный язык и ие является собственностью какой-
либо компании или группы компаний, организации или группы организа-
ций.
Ни авторами, ни Комитетом Кобола не дается гарантии, явной или
подразумеваемой, в отиошеиии точности и функционирования системы
и языка программирования. Более того, ие предполагается никакой ответ-
ственности авторов или Комитета в связи с этим.
Установлены процедуры поддержки Кобола. Запросы, касающиеся про-
цедур для предлагаемых изменений, следует направлять Исполнительному
Комитету Конференции по Языкам Систем Данных (Conference on Data
Systems Languages),
3
Авторы и держатели авторских прав на материалы, используемые
здесь:
FLOW-MATIC (Trademark of Sperry Rand Corporation),
Programming for UNIVAC (R) I and II,
Data Automation Systems copyrighted 1958, 1959,
by Sperry Rand Corporation; IBM Commercial Translator,
Form N F28-8013, copyrighted 1959, by IBM;
FACT, DSI 27A5260-2760, copyrighted 1960
by Minneapolis — Honeywell
имеют специально заверенное право на использование этого материала це*
ликом или частично в спецификациях Кобола. Это право распространяется
иа воспроизведение и использование спецификаций Кобола в руководствах
по программированию илн аналогичных публикациях»
Унифицированный Кобол имеет модульную структуру. Совокупность элемен-
тов языка, обеспечивающая выполнение определенных процедур обработки, обра-
зует функциональный модуль языка. Унифицированный язык Кобол содержит
8 функциональных модулей, имеющих следующие названия: ядро, последователь-
ный доступ, произвольный доступ, обработка таблиц, сортировка, генератор отче-
тов,.сегментация, библиотека.
Ядро языка определяет допустимый набор литер и основные элементы изыка,
содержащиеся в каждом из четырех разделов программы на Коболе: разделе
идентификации, разделе оборудования, разделе данных в разделе процедур.
Модуль последовательного доступа обеспечивает возможность последователь-
ной записи и чтения файла. Записи помещаются в файл в той последовательно-
сти, в которой они создаются, а читаются в той последовательности, в какой они
содержатся в файле.
Модуль произвольного доступа позволяет записывать и извлекать записи
файла в любом порядке. Порядком обращения к записям управляет программист
с помощью специальных ключей.
Модуль обработки таблиц позволяет определять таблицы н обращаться
к элементам таблиц, используя индексы. Этот модуль обеспечивает также удоб-
ный метод поиска в таблице элемента, удовлетворяющего заданному условию.
Модуль сортировки позволяет сортировать записи файла в возрастающей
вли убывающей последовательности управляющих полей, а также включать необ-
ходимые процедуры обработки файлов до и после выполнения сортировки.
Модуль генератора отчетов содержит средства описания формата отчетов
и выдачи отчетов.
Модуль сегментации дает возможность делить большие программы на сег-
менты, которые^югут постоянно находиться в основной памяти илн вызываться
в память по мере необходимости и перекрывать другие сегменты. Это обеспечи-
вает более эффективное использование основной памяти при выполнении про-
граммы.
Модуль библиотеки позволяет во время трансляции включать в исходную
программу части, которые предварительно были помещены в библиотеку. При
необходимости онн могут быть при этом скорректированы!
..Унифицированный изык Кобол включает два варианта; английский в рус-
ский. В книге описывается русский вариант языка Кобол, реализованный в опе-
рационных системах ДОС ЕС и ОС ЕС Единой Системы ЭВМ. Разработка вы-
полнена в Научно-исследовательском институте электронных вычислительных
машин г. Минска. По отношению к русскому варианту унифицированного языка
Кобол описываемый язык имеет некоторые дополнения, связанные с расширением
языка или с более полным использованием возможностей операциоииой системы.
К основным дополнениям к унифицированному Коболу в описываемом языке
относятся следующие элементы:
средства описания и обработки файлов с индексно-последовательной и (толь-
ко для ОС ЕС) относительной организацией;
1 Х3.4 COBOL Information Bulletin 9 USASI Working Group X3.4.4 COBOL
Standards. SICPLAN notices, vol, 2, № 4, 1967 Association for Computing Maohi-
nery.
4
средства связи между программами;
средства управления форматом распечатки исходной программы;
среде: ва отладки:
оператор ПРЕОБРАЗОВАТЬ, фразы ПРИМЕНИТЬ, ОБЛАСТЬ ДОРОЖКИ.
ГРАНИЦА ДОРОЖЕК (только для ОС ЕС), МЕТОД ЗАПИСИ, ОБЛАСТЬ
СЧЕТА (только дли ОС ЕС), ОБЛАСТЬ СОХРАНЕНИЯ (только для ОС ЕС),
ДИСПОЗИЦИЯ (только для ОС ЕС), все специальные регистры, кроме СЧЕТ-
ЧИК, СЧЕТЧИК-СТРОК, СЧЕТЧИК-СТРАНИЦ.
Прочие отличня от унифицированного языка специально указываются при
Описании конкретных средств языка. Программисту, заботящемуся о совмести-
мости программ на Коболе для разных цифровых ЭВМ, следует избегать упот-
ребления неунифицированных элементов языка.
Некоторые элементы языка применимы только в конкретной операционной
системе; ДОС ЕС или ОС ЕС. В описании этих элементов содержится соответст-
вующее указание на применимость только в операционной системе ДОС ЕС
(только для ДОС ЕС) или ОС ЕС (только для ОС ЕС). Элементы, описание ко-
торых не содержит такого указания, применимы и в ДОС ЕС, и в ОС ЕС.
Описание языка в книге дается в виде двух частей. В первую часть включено
описание трех модулей: ядра, последовательного доступа и произвольного досту-
па. Описание этих средств дается в традиционной манере, т. е. в соответствии
с делением программы на Коболе на разделы: идентификации, оборудования,
данных и процедур, а не по их принадлежности к определенным модулям языка.
Описание всех остальных модулей языка вынесено во вторую часть книги. Каж-
дый модуль языка описывается в отдельной главе и может изучаться независимо
от других модулей по мере необходимости его применения при разработке про-
грамм. Средства межпрограммных связей н отладки рассматриваются здесь как
отдельные модули языка.
Книга предназначается пользователям моделей ЕС ЭВМ. Предполагается,
что читатель уже знаком с основами Кобола, например, по книге «Кобол ЭВМ
«Минск-32» [1] или «Кобол. Программированное пособие» [2].
Общие сведении о функциях операционной системы, языке управления зада-
ниями и управлении данными в ОС ЕС и ДОС ЕС читатель может найти в кни-
гах «Система математического обеспечения ЕС ЭВМ» [3], «Операционная систе-
ма ДОС ЕС» [4] и эксплуатационной документации для соответствующей опе-
рационной системы.
В этой книге приводятся лишь краткие сведения о подготовке программы
в русском варианте унифицированного Кобола к трансляции и перфорация
исходных данных. Полная информация о подготовке заданий ' на трансляцию^
редактирование и выполнение программ на Коболе в операционных системах
ОС ЕС и ДОС ЕС содержится в соответствующих эксплуатационных докумен-
тах для английского и русского вариантов изыка. Сводка форматов русского
варианта языка Кобол с указанием их эквивалентов в английском варианте при-
ведена в приложении 1.
Авторы выражают благодарность всем коллегам по работе, принимавшим
участие в разработке трансляторов с изыка Кобол для операционных систем
ДОС ЕС н ОС ЕС.
1. ВВЕДЕНИЕ. ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ
1.1. ОСНОВНЫЕ понятия
1.1.1. Структура Исходной программы
Программа на языке Кобол (исходная программа) состоит из четы-
рех разделов: раздела идентификации, раздела оборудования, раздела
данных и раздела процедур. Разделы должны располагаться в про-
грамме в указанном порядке и начинаться с заголовка раздела.' За
заголовком раздела должна следовать точка.
Раздел идентификации имеет заголовок: РАЗДЕЛ ИДЕНТИФИКА-
ЦИИ. В разделе идентификации указывается имя программы и дается
некоторая справочная информация о программе. Этот раздел служит
в основном для документации, так как позволяет указать, например,
автора программы, учреждение, в котором разрабатывается програм-
ма, назначение программы.
Раздел оборудования имеет заголовок: РАЗДЕЛ ОБОРУДОВА-
НИЯ. В этом разделе описываются те особенности задачи обработки
данных, которые связаны с физическими характеристиками конкрет-
ной цифровой ЭВМ. Раздел оборудования состоит из двух секций: сек-
ции конфигурации и секции ввода-вывода. Каждая секция начинается
с соответствующего заголовка секции: СЕКЦИЯ КОНФИГУРАЦИИ
или СЕКЦИЯ ВВОДА-ВЫВОДА, за которым должна следовать точ-
ка. Каждая секция в разделе оборудования состоит из параграфов.
Параграф начинается с заголовка параграфа, который должен закан-
чиваться точкой.
В секции конфигурации три параграфа, имеющие следующие
заголовки: ИСХОДНАЯ-МАШИНА, РАБОЧАЯ-МАШИНА, и СПЕ-
ЦИАЛЬНЫЕ-ИМЕНА. В этих параграфах в виде статей описания
оборудования дается информация о машине, на которой будет транс-
лироваться и выполняться программа,- присваиваются специальные
имена некоторым функциональным именам, используемым в опера-
ционной системе.
6
В секции ввода-вывода раздела оборудования два параграфа, имею-
щие следующие заголовки: УПРАВЛЕНИЕ-ФАЙЛАМИ и УПРАВЛЕ-
НИЕ-ВВОДОМ-ВЫВОДОМ.
В параграфе управления файлами должен быть назван каждый
файл, который будет обрабатываться в программе. Для каждого файла
указывается тип периферийного устройства, которое назначается
файлу. Конкретное физическое устройство назначается файлу в опера-
ционной системе ДОС ЕС с помощью операторов языка управления
заданиями, а в операционной системе ОС ЕС назначение файлам
физических устройств является функцией самой системы. В параграфе
управления файлами определяется организация файла на носителе
данных (последовательная, прямая, индексно-последовательная или
относительная) и метод доступа к нему (последовательный или произ-
вольный).
В параграфе управления вводом-выводом могут быть указаны специ-
альные методы организации ввода-вывода, которые должны быть при-
менены к файлу. Некоторые специальные методы ввода-вывода пред-
назначаются в основном для обеспечения более эффективного исполь-
зования возможностей конкретной операционной системы, являются
специфическими для каждой операционной системы и описываются
элементами языка, которые не принадлежат к унифицированному
Коболу. Использование этих средств в программе не является обя-
зательным.
Раздел данных имеет заголовок: РАЗДЕЛ ДАННЫХ. В этом раз-
деле описывается вся информация, которая должна обрабатываться
программой. Эта информация может быть двух типов:
а) информация, записанная на носители данных в виде файлов;
б) информация, которая должна храниться только в основной памя-
ти в виде констант, таблиц и промежуточных результатов, получающих-
ся при выполнении программы.
Раздел данных может содержать четыре секции: секцию файлов,
секцию рабочей памяти, секцию связи и секцию отчетов. Каждая сек-
ция начинается с соответствующего заголовка: СЕКЦИЯ ФАЙЛОВ,
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ, СЕКЦИЯ СВЯЗИ и СЕКЦИЯ
ОТЧЕТОВ: Заголовок должен заканчиваться точкой.
В секции файлов описываются файлы, которые будут обрабаты-
ваться программой и которые были названы в параграфе управления
файлами раздела оборудования. Описание файла дается в виде статьи
описания файла, начало которой указывается с помощью двухбуквен-
ного индикатора уровня ОФ (Описание Файла) или ОС (Описание
Сортируемого файла), за которой следует одна или несколько статей
описания логических записей, составляющих файл.
Внутренние данные, хранящиеся только в основной памяти и не
организованные в виде файлов, описываются в секции рабочей памяти.
Если такие данные не находятся ни в какой иерархической связи с дру-
гими данными, они описываются с помощью статей описания несвя-
занных данных (такие статьи начинаются с фиксированного номера
уровня 77). В противном случае они описываются так же, как логиче-
ские записи в секции файлов.
7
Секция связи имеет такую же структуру, как и секция рабочей
памяти, и используется для описания данных, передаваемых в эту
программу из другой программы. Секция связи относится к средствам
связи между программами в Коболе.
Секция отчетов предназначена для описания отчетов, которые
должны создаваться этой программой с помощью средств генератора
отчетов. Описание отчета дается в виде статьи описания отчета,
начало которой указывается с помощью индикатора уровня 00 (Опи-
сание Отчета), за которой следует одна или несколько статей описания
групп отчета. Группа отчета является логической единицей информа-
ции для отчета аналогично тому, как логическая запись является еди-
ницей информации для файла.
Статья раздела оборудования или данных представляет собой одну
или несколько фраз, заканчивающихся точкой. Фраза в разделах обо-
рудования и данных — это последовательность слов языка определен-
ного формата, предназначенная для указания отдельной характери-
стики файла, оборудования или данных.
Раздел процедур имеет заголовок:
РАЗДЕЛ ПРОЦЕДУР [ИСПОЛЬЗУЯ идентификатор-1 [идентификатор-2]...].
Фраза ИСПОЛЬЗУЯ должна присутствовать в заголовке раздела
процедур только в случае, когда эта программа вызывается другой
программой и ей передаются параметры. В разделе процедур с помощью
операторов языка записываются процедуры, необходимые для реше-
ния задачи обработки данных. Процедура — это секция или группа
секций, параграф или группа параграфов раздела процедур.
Секция раздела процедур начинается с заголовка секции, который
состоит из зарезервированного слова СЕКЦИЯ, за которым следует
определяемое программистом имя секции (в отличие от разделов обо-
рудования и данных, где заголовок секции состоит из двух зарезерви-
рованных слов языка). Если раздел процедур должен сегментировать-
ся, за именем секции через пробел может быть указан номер сегмента.
Заголовок секции заканчивается точкой.
Секция состоит из одного или нескольких параграфов. Параграф
начинается с имени параграфа, которое определяется программистом
в отличие от заголовков параграфов в разделах идентификации и обо-
рудования, где заголовки параграфов представляют зарезервирован-
ные слова языка. Параграф в разделе процедур состоит из предложе-
ний. Предложение — это один илй несколько операторов, заканчиваю-
щихся точкой. Оператор — это глагол Кобола, определяющий дей-
ствие, которое должно быть выполнено во время трансляции или вы-
полнения программы, за которым следует один или несколько опе-
рандов. Некоторые операторы предусматривают несколько вариантов
выполнения, которые задаются фразами оператора.
В языке Кобол имеются три типа операторов: условные операторы,
повелительные операторы и операторы управления трансляцией.
Условный оператор — это оператор, содержащий условие, которое
проверяется для установления того, какой из альтернативных вариан.
тов хода программы нужно выполнить. Условный оператор может на
8
ходиться только в конце предложения. Условному оператору в пред-
ложении могут предшествовать только повелительные оператори.
Повелительный оператор указывает, что рабочей программов
должно быть выполнено безусловное действие.
Оператор управления трансляцией указывает, что во время траио-
ляции должно быть выполнено некоторое специальное действие.
Условные операторы. К глаголам Кобола, используе-
мым в условных операторах, относятся следующие: ЕСЛИ; ПРИ; СЛО-
ЖИТЬ, ВЫЧИСЛИТЬ, ОТНЯТЬ, УМНОЖИТЬ, РАЗДЕЛИТЬ (ПРИ
ПЕРЕПОЛНЕНИИ); ПЕРЕЙТИ (В ЗАВИСИМОСТИ ОТ); ЧИТАТЬ,
ИСКАТЬ, ВЕРНУТЬ (В КОНЦЕ); ПИСАТЬ (В КОНЦЕ СТРАНИЦЫ
или ПРИ ОШИБКЕ КЛЮЧА); ЧИТАТЬ, ПОДВЕСТИ, ОБНОВИТЬ
(ПРИ ОШИБКЕ КЛЮЧА); ВЫПОЛНИТЬ (ДО); ИСКАТЬ (КОГДА):
ПЕЧАТАТЬ (ИЗМЕНЕННЫЙ).
В круглых скобках указаны фразы, наличие которых в повелитель-
ных операторах делает их условными. Эти фразы рассматриваются
в описании соответствующих повелительных операторов.
Повелительные операторы. Глаголы языка Кобол,
используемые в повелительных операторах, можно сгруппировать
в следующие категории:
а) арифметические: СЛОЖИТЬ, ОТНЯТЬ, РАЗДЕЛИТЬ, УМНО-
ЖИТЬ, ВЫЧИСЛИТЬ;
б) управления последовательностью выполнения процедур: ПЕ-
РЕЙТИ, ИЗМЕНИТЬ, ВЫПОЛНИТЬ, ОСТАНОВИТЬ, ВЫЙТИ;
в) перемещения и редактирования данных: ПОМЕСТИТЬ, ПРО-
СМОТРЕТЬ, ПРЕОБРАЗОВАТЬ;
г) ввода-вывода: ОТКРЫТЬ, ПОДВЕСТИ, ЧИТАТЬ, ПИСАТЬ,
ОБНОВИТЬ, ЗАКРЫТЬ, ПРИНЯТЬ, ВЫДАТЬ;
д) генерации отчетов: ГЕНЕРИРОВАТЬ, НАЧАТЬ, ЗАКОНЧИТЬ,
ПОДАВИТЬ;
’ е) обработки таблиц: ИСКАТЬ, УСТАНОВИТЬ;
ж) сортировки: СОРТИРОВАТЬ, ВЕРНУТЬ, ПЕРЕДАТЬ;
з) отладки: ВКЛЮЧИТЬ, ОТКЛЮЧИТЬ, ПЕЧАТАТЬ;
и) связи между программами: ВЫЗВАТЬ, ВХОД, ВЕРНУТЬСЯ,
ВЫЙТИ (ИЗ ПРОГРАММЫ).
Имеется один оператор, который относится не к типу процедурным
операторов, а к типу декларативных, т. е. позволяющих объявить, что
некоторая процедура должна выполняться, когда возникает опреде-
ленное условие. К декларативным операторам относится оператор
ИСПОЛЬЗОВАТЬ.
Операторы управления трансляцией. Глаго-
лы, используемые в операторах управления трансляцией, делятся и
следующие группы:
а) средств использования библиотеки исходных текстов: КОПИРО-
ВАТЬ, ОСНОВА, ВСТАВИТЬ, УДАЛИТЬ;
б) средств использования других исходных языков: ВОЙТИ;
в) управления форматом распечатки: ПРОГОН. ПРОПУСК!, ПРО-
ПУСК2, ПРОПУСКЗ;
г) пакета отладки: ОТЛАДКА.
9
Все операторы, кроме операторов КОПИРОВАТЬ и ВОЙТИ, отно-
сятся к специальному типу операторов управления трансляцией и не
принадлежат унифицированному Коболу. Они записываются по спе-
циальным правилам, которые приведены в п. 1.1.8.
Оператор ВОЙТИ в унифицированном Коболе предназначается
для того, чтобы обеспечить возможность записи части исходной про-
граммы на другом языке программирования.
Формат оператора:
ВОЙТИ В имя-языка [имя-ирограммы].
Однако в операционных системах ДОС ЕС и ОС ЕС связь с други-
ми языками программирования осуществляется на уровне объектных
модулей, которые получаются в результате независимой трансляции
отдельных исходных модулей, написанных на различных языках про-
граммирования, соответствующими трансляторами. Поэтому оператор
ВОЙТИ воспринимается трансляторами Кобола ЕС как комментарий.
Для связи программ на Коболе с программами на других языках про-
граммирования служат операторы связи между программами.
В разделе процедур некоторые процедуры могут быть определены
как декларативные. В отличие от недекларативных процедур, которые
выполняются в той последовательности, в которой они написаны в про-
грамме, или в соответствии с правилами для операторов управления
последовательностью выполнения процедур, декларативные процедуры
выполняются в тот момент, когда возникает определенное условие,
например, ошибка ввода-вывода. Декларативные процедуры группи-
руются в начале раздела процедур, в его части, называемой декларатив-
ной. Декларативная часть раздела процедур начинается с заголовка
ДЕКЛАРАТИВЫ, за которым следует точка, а заканчивается слова-
ми КОНЕЦ ДЕКЛАРАТИВ и точкой. Декларативная часть раздела
процедур состоит из секций, за заголовком которых должен следовать
оператор ИСПОЛЬЗОВАТЬ, идентифицирующий эту процедуру как
декларативную и определяющий момент времени, в который должна
выполняться эта декларативная процедура. В декларативной части
раздела процедур заголовок секции не может иметь номер сегмента.
В разделе процедур параграф заканчивается непосредственно перед
именем следующего параграфа, или перед словом СЕКЦИЯ, или в кон-
це раздела процедур, или перед словами КОНЕЦ ДЕКЛАРАТИВ
в декларативной части раздела процедур. Секция заканчивается непо-
средственно перед словом СЕКЦИЯ, или в конце раздела процедур, или
веред словами КОНЕЦ ДЕКЛАРАТИВ в декларативной части.
Концом раздела процедур (и физическим концом программы) яв-
ляется физическая позиция в исходной программе, за которой не по-
является больше никаких процедур.
Заголовки всех разделов должны присутствовать и быть правиль-
но записаны в программе всегда, даже если раздел ничего, кроме за-
головка, не содержит. Заголовки секций и параграфов опускаются, ес-
ли параграф или секция не требуется в программе.
В любом месте исходной программы может быть введен коммента-
рий путем помещения литеры «*» (звездочка) в 7-й позиции строки блан-
10
ка кодирования (о записи программы на бланках см. п. 1.1.8.). Строка,
отмеченная звездочкой, может содержать любые литеры из набора ли-
тер ЕС ЭВМ. Такая строка появляется в распечатке исходной програм-
мы, но ни для каких других целей транслятором не используется,
Общая структура программы на Коболе:
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, имя-программы.
[АВТОР, [статья-комментарий!...1
[ПРЕДПРИЯТИЕ, [статья-комментарий)...!
[ДАТА-НАПИСАНИЯ. [статья-комментарий)..Л
[ДАТА-ТРАНСЛЯЦИИ. [статья-комментарий)...]]
[ПОЛНОМОЧИЯ, [статья-комментарий]...]
РАЗДЕЛ ОБОРУДОВАНИЯ.
[СЕКЦИЯ КОНФИГУРАЦИИ.
ИСХОДНАЯ-МАШИНА. имя-реализации.
РАБОЧАЯ-МАШИНА, статья
[СПЕЦИАЛЬНЫЕ-ИМЕНА. [статья]]
[СЕКЦИЯ ВВОДА-ВЫВОДА.
УПРАВЛЕНИЕ-ФАЙЛАМИ. {статья}...
[УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ. [статья]]
РАЗДЕЛ ДАННЫХ.
[СЕКЦИЯ ФАЙЛОВ.
{статья описания файла
{статья описания записи}...} ...]
[СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
[статья описания несиязанного данного]..,
[статья описания записи ...]
[СЕКЦИЯ СВЯЗИ.
[статья описания несвязанного данного].
Чстатья описания записи]...]
[СЕКЦИЯ ОТЧЕТОВ.
{статья описания отчета
{статья описанйя группы отчета}...}...]
РАЗДЕЛ ПРОЦЕДУР [ИСПОЛЬЗУЯ идентификатор-1 (идентификатор-2].^»
[[ДЕКЛАРАТИВЫ.
{СЕКЦИЯ имя-секции. оператор ИСПОЛЬЗОВАТЬ, "
{имя-параграфа, {предложение}...}...}...]
КОНЕЦ ДЕКЛАРАТИВ.]
{СЕКЦИЯ имя-секции [номер-сегмента].]
{имя-параграфа, {предложение}...}....}...
Система принятых обозначений поясняется ниже.
и
1.1.2. Система обозначений
При написании программы программист должен руководствоваться
приводимыми в данной книге форматами элементов языка. Форматы
являются обобщенными описаниями этих элементов и представлены в
единообразной системе обозначений. Система обозначений, применяе-
мая в форматах, не является частью языка; она служит только для
описания языка. Ниже следуют пояснения принятой в форматах си-
стемы обозначений:
а) все слова, полностью напечатанные прописными буквами, яв-
ляются зарезервированными словами. Эти слова имеют специальный
смысл в Коболе. Они должны фактически присутствовать в соответст-
вующих элементах программы. Если такое слово неправильно написа-
но, оно не будет опознано как зарезервированное слово и может
вызвать ошибку в программе;
б) все подчеркнутые зарезервированные слова являются ключевыми
словами. Они обязательны, если только часть формата, содержащая
их, сама не является необязательной. Если ключевое слово пропущено
или неправильно написано, это рассматривается как ошибка в програм-
ме. Неподчеркнутые зарезервированные слова могут быть включены или
опущены по желанию программиста. Эти слова используются только
для удобства при чтении и являются необязательными словами. Если
необязательные слова используются, они должны быть правильно
написаны;
в) литеры +, —, С, >, =, указанные в форматах, хотя и не под-
черкнуты, но требуются, когда такие форматы используются;
г) литеры пунктуации и другие специальные литеры (кроме мно-
готочия, квадратных и фигурных скобок, поясняемых ниже) должны
быть фактически представлены в соответствующих местах программы.
Пунктуация существенна там, где она показана в форматах. Дополни-
тельная пунктуация может быть введена в соответствии с правилами
пунктуации, описанными в п. 1.1.8;
д) слова, напечатанные строчными буквами, представляют инфор-
мацию, которую должен предоставить программист. Эти слова опреде-
лены в сопутствующем тексте; •
е) чтобы облегчить ссылки в тексте на некоторые элементы в фор-
матах, напечатанные строчными буквами, они связываются дефисами
водно слово, обозначающее некоторую синтаксическую единицу. Иног-
да к такому слову через дефис присоединяется цифра или буква. Эта
модификация не изменяет синтаксического определения слова;
ж) в некоторых форматах за словом (словами), напечатанным про-
писными буквами, следует слово «параграф», «статья», «повелительный-
оператор» или «оператор». Они обозначают элементы языка, которые
поясняются при описании других форматов в соответствующих разде-
лах. Во всех форматах «првелительный-оператор» означает также и
последовательность повелительных операторов;
з) квадратные скобки ([]) используются для обозначения того, что
заключенный в них элемент формата может быть использован или опу.
12
щен в зависимости от требований конкретной программы. Если в квад-
ратных скобках два или более элементов расположены в столбик, мо-
жет использоваться или любой из них, или ни одного;
и) фигурные скобки ({}), заключающие расположенные в столбик
элементы, указывают, что один из заключенных в скобки элементов
обязателен;
к) многоточие (...) указывает, что непосредственно предшествую-
щая часть формата, заключенная в квадратные или фигурные скобки,
может быть неоднократно повторена. В примерах фрагментов программ
многоточие будет использоваться для указания того, что часть про-
граммы, не требующаяся для понимания данного примера, опущена;
л) комментарии, ограничения и пояснения по использованию и
смыслу каждого формата содержатся в сопутствующем тексте.
В примерах программ для удобства изучения языка слова, опреде-
ляемые программистом (в отличие от зарезервированных слов), напе-
чатаны строчными буквами. Однако строчные буквы не входят в ал-
фавит Кобола, поэтому при подготовке программы на перфокартах они
должны перфорироваться как прописные.
1.1.3. Набор литер языка
Подобно любому языку язык Кобол имеет алфавит, определяющий
набор допустимых элементов, из которых образуются слова языка.
Элементы алфавита: буквы, цифры и специальные знаки будем назы-
вать литерами. При записи программ на Коболе должны использовать-
ся только литеры языка Кобол. Исключение составляют нечисловые
литералы, которые могут включать любые литеры, входящие в набор
литер, машины.
Полный набор литер языка состоит из 71 литеры;
0. 1, шч 9 —цифры,
А Б, », Я - заглавные буква русского алфавита, кроме Е, Ъ,
D, F, G, I, J, L, N, Q, R, S, U V W, Y. Z — заглавные буквы латинского алфави-
та, не совпадающие по начертанию а русскими,
— — пробел;
-J- — плюс?
— — минус (дефис);
• — звездочка;
I — дробная черта;
«= — равно;
ф — знак денежной ед и пипы;
, — запятая;
; — точка в запятой;
. — точка (десятичная точка);
•или' — кавычки или апостроф;
( — круглая скобка левая;
) — круглая скобка правая;
> — больше;
< — меньше.
Пробел не имеет графического изображения, поэтому для обозначе-
ния пробела там, где не очевидно, что он присутствует, будет исполь-
воватьвя литера —.
IS
Хотя стандартной литерой для обозначения кавычек в Коболе
является литера” (кавычки), транслятор воспринимает в качестве ка-
вычек и литеру '(апостроф). Если для образования нечисловых лите-
ралов используется литера”, тогда в состав литерала может быть
включена литера', и наоборот. Программист должен указать трансля-
тору, какая из этих литер будет использоваться в программе для обо-
значения кавычек. Для транслятора Кобола в ДОС ЕС это указывает-
ся в управляющем операторе CBL транслятора, а для транслятора
в ОС ЕС—в операторе ЕХЕС управления заданиями. По умолчанию
предполагается апостроф. В дальнейшем будет использоваться только
термин «кавычка» или «кавычки», который фактически может означать
«кавычки» или «апостроф» в соответствии с приведенным здесь пра-
вилом.
1.1.4. Типы слов
Слово — это последовательность не более 30 литер из следующего
набора: цифр 0—9, букв латинского и русского алфавитов, кроме Ё
и Ъ, дефиса (-).
Слово не может начинаться или заканчиваться дефисом. Слово мо-
жет быть ограничено пробелом, точкой, правой круглой скобкой, запя-
той или точкой с запятой. При использовании пробела в качестве раз-
делителя слов можно использовать более одного пробела. Примерами
слов являются: ВАЗ-2103, 25РУБ, NAME1, СЕКЦИЯ, 06-55МИМ
НАБОР-ДЕТАЛЕЙ.
Различаются следующие типы слов: зарезервированные слова, имена
реализации и слова, определяемые программистом.
|Эти типы слов образуют непересекающиеся множества. Набор за-
резервированных слов фиксирован в языке Кобол. Имена реализации
определяются разработчиками транслятора и фиксированы только для
конкретной реализации. Ни зарезервированные слова, ни имена реали-
зации не должны использоваться в программе на Коболе в качестве
слов, определяемых программистом. Полный список зарезервирован-
ных слов и имен реализации содержится в приложении 2.
Зарезервированные слова используются трансля-
тором для распознавания фраз и операторов языка в исходной програм-
ме. Для некоторых зарезервированных слов допускаются сокращения,
например Ш вместо ШАБЛОН, которые равноценны полным словам.
Всюду, где сокращения допустимы, они показаны в форматах.
Имена реализации — это фиксированные или частично
фиксированные слова, определенные в данной реализации для конкрет-
ного функционального назначения; например, имена SYSLST, SYSPCH
для ДОС ЕС или SYSIN, SYSOUT для ОС ЕС, имя ЕС-1035 цифровой
ЭВМ, для которой составляется программа, и т. п. Подробная инфор-
мация об именах реализации содержится в описании параграфов СПЕ-
ЦИАЛЬНЫЕ-ИМЕНА и УПРАВЛЕНИЕ-ФАЙЛАМИ раздела обо-
рудования.
Все остальные слова в программе определяются про-
граммистом в соответствии с форматом фразы или оператора
языка. Слова, определяемые программистом, делятся на следующие
14
типы: имя алфавита, имя данного, имя записи, имя индекса, имя от-
чета, имя параграфа, имя программы, имя процедуры, имя секции,
имя текста, имя условия, имя файла (имя сортируемого файла), мне-
моническое имя, номер сегмента, номер уровня.
Имена составляются по определенным для каждого типа прави-
лам и используются для ссылок на соответствующие объекты про-
граммы.
Имена данных, записей, отчетов и файлов представляют собой сло-
ва, определяемые программистом в соответствующих статьях описа-
ния в разделе данных; имена процедур определяются в заголовках па-
раграфов и секций в разделе процедур. Если в форматах языка исполь-
зуется термин «имя-данного», он представляет слово, которое не может
ни уточняться, ни индексироваться, если в правилах для этого формата
нет специального разрешения. Там, где требуется, чтобы ссылка на дан-
ное была однозначной, что может быть обеспечено указанием вслед за
именем данного его уточнителей или индексов (см. п. 1.1.5), вместо
термина «имя-данного» будет использоваться термин «идентификатор».
Ссылки на запись всегда обозначаются в форматах термином «имя-за-
писи», даже если это имя и не уникально, т. е. требует уточнения именем
файла. При ссылках на имя файла из статьи описания сортируемого
файла будет использоваться термин «имя-сортируемого-файла».
Имя алфавита — это слово, определяемое в параграфе СПЕЦИАЛЬ-
НЫЕ-ИМЕНА исходной программы для именования основной после-
довательности кодов; применяемой в операциях нечислового сравне-
ния, поиска в таблицах и сортировки.
Имя индекса — это слово, именующее регистр или область основной
памяти цифровой ЭВМ, содержимое которой используется для адреса-
ции отдельного элемента в таблице.
Имя программы—это слово, которое идентифицирует программу
на Коболе для Управляющей программы операционной системы. Имя
программы указывается в параграфе ПРОГРАММА раздела идентифи-
кации. Правила образования имени программы приведены в описании
раздела идентификации.
Имя текста — это имя, под которым программа на Коболе или
ее часть содержится в библиотеке (имя книги в библиотеке исходных мо-
дулей для ДОС ЕС, имя раздела в библиотечном наборе для ОС ЕС).
Имя текста образуется по тем же правилам, что и имя программы.
Имя условия — это слово, именующее определенное значение или
диапазон значений из полного набора значений, которые конкретное
данное может принимать, или слово, именующее состояние определен-
ного реализацией переключателя. Данное, значениям которого даются
имена условий, называется условной переменной.
Мнемоническое имя — это слово, которое связывается с и менем
реализации в разделе оборудования. В разделе процедур мнемони-
ческое имя может быть написано вместо связанного с ним имени реали-
зации в любом формате, где такая замена допустима.
Имя алфавита, имя данного, имя записи, имя индекса, имя отчета,
имя условия, имя файла и мнемоническое имя образуются по одина-
ковым правилам и должны содержать по крайней мере одну букву.
IS
Имя процедуры (имя параграфа или имя секции) может состоять из
одних цифр. Два цифровых имени процедуры равноценны тогда и толь-
ко тогда, когда они состоят из одинакового количества цифр и имеют
одинаковое значение.
Номер сегмента — это слово, которое используется для классифи-
кации секций для целей сегментации. Номера сегментов — это числа
от 1 до 99.
Номера уровней—это слова, используемые для описания иерархи-
ческой структуры логической записи или для указания специальных
свойств статьи описания данного. Номер уровня выражается числом
из одной или двух цифр в диапазоне от 1 до 49 или может быть числом
66, 77, 88.'
1.1.5. Уникальность имен. Уточнение
Для именования некоторых объектов программы могут использо-
ваться идентичные по написанию слова при условии, что ссылки на
такие объекты могут быть сделаны однозначными. Однозначность (уни-
кальность) ссылки может быть достигнута путем уточнения или индек-
сирования имен, имеющих идентичное написание, или путем использо-
вания имен, имеющих различное написание.
Имя данного, уникальное само по себе или сделанное уникальным
в помощью синтаксически правильного уточнения или индексирова-
ния, называется идентификатором.
Если имя находится в иерархии имен, его можно сделать уникаль-
ным путем указания одного или нескольких имен более высоких уров-
ней иерархии, которые называются уточнителями. Процесс
однозначного определения имени называется уточнением. Уточ-
нение производится путем указания после имени данного или имени
параграфа одной или более фраз, составленных из уточнителя, кото-
рому предшествует связка ИЗ. Должно быть указано столько уточни-
телей, сколько требуется, чтобы сделать имя уникальным; однако
не требуется обязательно указывать все уровни иерархии.
Пусть, например, в программе имеются два файла со следующими
описаниями:
ОФ главный-файл... ОФ файл-корректур. ..
01 запись-глав ... 01 запись-корр ...
02 таб-номер ... 02 таб-номер ...
02 фно ... 02 фио ...
При обращении к данным «таб-номер» и «фио» в разделе процедур
их имена должны уточняться. Уточнение «таб-номер ИЗ запись-глав»
или «таб-номер ИЗ главный-файл» является достаточным для обеспе-
чения уникальности ссылки. Уточнение «таб-номер ИЗ запись-глав
ИЗ главный-файл» правильно, но не необходимо.
Уточнителем наивысшего уровня, допустимым для имени данного,
является имя, связанное с индикатором уровня (ОФ, ОС или ОО),
т. е. имя файла, имя сортируемого файла или имя отчета. Наивысшим
16
и единственным уточнителем, допустимым для имени процедуры, яв-
ляется имя секции. Таким образом, имена, связанные с индикаторами
уровней, и имена секций не должны совпадать, так как они не могут
быть уточнены.
Имя условной переменной может быть использовано в качестве
уточнителя для любого из имен условий, связанных с ней. В свою оче-
редь имя условной переменной также может быть уточнено.
Общие правила уточнения сводятся к следующим:
а) каждый уточнитель должен иметь последовательно более вы-
сокий уровень и находиться в той же иерархии, что и имя, которое он
уточняет;
б) одно и то же имя не должно появляться на двух уровнях в иерар-
хии, так как окажется, что имя уточняет само себя;
в) если одинаковое имя данного или имя условия присвоено бо-
лее чем одному данному в исходной программе, имя данного или нмя
условия должно уточняться всякий раз, когда на него ссылаются в
разделе процедур, оборудования или данных. Только во фразе ПЕРЕ-
ОПРЕДЕЛЯЕТ уточнение не требуется;
г) параграфы одной и той же секции не должны иметь одинаковые
имена. Когда имя параграфа уточняется именем секции, слово СЕК-
ЦИЯ не должно использоваться. Имя параграфа может не уточнять^
ся, когда на него ссылаются внутри секции, которой этот параграф ?
принадлежит;
д) нмя может быть уточнено, даже если ему не нужно уточнение.
Если есть более одного сочетания уточнителей, которые обеспечивают
уникальность, может применяться любое из них;
е) нельзя использовать в качестве уточнителя имя данного, которое
требует индексирования.
Кроме того, при выборе имен необходимо учитывать следующие
ограничения:
повторяющиеся имена секций не допускаются;
имя данного не может совпадать • именем секции или именем пара-
графа;
повторение имен данных не должно встречаться в тех местах, где
имена данных не могут быть вделаны уникальными в помощью уточ-
нения.
Об использовании индексирования см. п. 7.2.1.
1.1.6. Константы
Как правило, данные, g которыми оперирует программа на Коболе,
описываются в разделе данных исходной программы. При описании
данного указывается название (имя) данного, которое позволяет об-
ращаться к любому значению, которое может принимать данное. Одна-
ко на практике часто употребляются данные, значение которых не изме-
няется в процессе обработки. Такие данные можно не описывать в раз-
деле данных, а в том месте программы, где требуется обращение к ним,
непосредственно указывать их значение.
; - ' ' ; 17
* •• * 'Ы - .-%. . •* t « у
Данное, значение которого в процессе обработки постоянно и не
может быть изменено, будем называть константой.
Имеются два типа констант: литералы и стандартные константы.
Литерал — это строка литер, значение которой определено на-
бором литер, из которых она состоит. Например, литерал 27.5 имеет
значение 27.5, а литерал «СВОДКА ЗА КВАРТАЛ»—значение СВОДКА
ЗА КВАРТАЛ. Литерал не имеет имени, и ссылка на литерал осуществ-
ляется указанием его значения. В тех случаях, когда один и тот же ли-
терал необходимо использовать во многих местах программы, удобнее
значению этого литерала присвоить имя в секции рабочей памяти раз-
, дела данных, а в разделе процедур обращаться к литералу по присвоен-
ному имени.
В зависимости от типа изображаемых данных будем различать чис-
ловые и нечисловые литералы. Числовые литералы бывают с фикси-
рованной точкой и с плавающей точкой.
Числовой литерал с фиксированной точкой — это строка литер, со-
стоящая из цифр 0—9, знака плюс или минус и литеры «.» (десятичной
точки). Числовой литерал с фиксированной точкой должен удовлет-
ворять следующим требованиям:
содержать от 1 до 18 цифр;
содержать не более одного знака (+,—). Если знак используется,
он должен быть крайней левой литерой литерала. Если знак не указан,
литерал считается положительным;
не должен содержать более одной десятичной точки. Десятичная
точка рассматривается как подразумеваемая десятичная точка (т. е.
хотя она и указывается в значении строки литер, она не занимает мес-
та при представлении литерала в основной памяти) и может быть ука-
зана в любом месте литерала, кроме крайней правой позиции. Если
литерал не содержит десятичной точки, он считается целым.
Числовой литерал в плавающей точкой представляет собой
непрерывную строку литер без пробелов внутри строки в следующем
формате:
[±] мантисса Е [±] показатель степени
Знаки плюс или минус, предшествующие мантиссе и показателю
степени, являются необязательными. Если знак не указан, подразуме-
вается знак плюс. Мантисса может содержать от 1 до 16 цифр с обяза-
тельной десятичной точкой, которая может находиться в любом месте
мантиссы. Показатель степени представляется непосредственно спра-
ва от мантиссы литерой Е, за которой следует знак плюс или минув
(если знак требуется) и одна или две цифры. Число, представленное
литералом с плавающей точкой, не должно превышать 0,72>107-. Ну-
левой показатель степени записывается как 0 или 00.
Значение литерала с плавающей точкой — это произведение ман-
тиссы на десять, возведенное в степень, заданную показателем. На-
пример, литерал + .72Е4-76 имеет значение 0.72- 107в.
В качестве десятичной точки в числовых литералах может исполь-
зоваться запятая. Если программист собирается использовать запятую,
он должен включить в параграф СПЕЦИАЛЬНЫЕ-ИМЕНА фразу
ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ. В дальнейшем будет использо-
18
ваться только термин «десятичная точка», который фактически может
означать десятичную точку или десятичную запятую в соответствии
с приведенным здесь правилом.
Нечисловой литерал — это строка любых литер из набора кодов
EG ЭВМ (ДКОИ), исключая кавычки. Нечисловой литерал может
содержать от 1 до 120 литер, заключенных в кавычки. Пробелы, на-
ходящиеся между кавычками, являются частью нечислового литерала
и, следовательно, частью его значения.
Стандартная константа — это константа, которой
присвоено определенное имя. Эги имена являются зарезервированными
словами.» Формы единственного и множественного числа стандартной
константы равноценны и могут заменять друг друга. Стандартная
константа может использоваться вместо литерала там, где допустимо
использование литерала, причем, если литерал числовой, допускается
только стандартная константа НУЛЬ (НУЛИ).
Следующие зарезервированные слова являются именами стандарт-
ных констант:
НУЛЬ (НУЛИ) — представляет число 0 или последовательность
литер «0» в зависимости от контекста;
ПРОБЕЛ (ПРОБЕЛЫ) — представляет один или несколько про-
НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ (НАИБОЛЬШИЕ-ЗНАЧЕНИЯ) —
представляет один или несколько кодов, который имеет наибольшее
вначение в последовательности кодов ЕС ЭВМ — шестнадцатеричное
вначение 'FF'. Этот код не имеет изображения;
НАИМЕНЫНЕЕ-ЗНАЧЕНИЕ (НАИМЕНЬШИЕ-ЗНАЧЕНИЯ) —
представляет один или несколько кодов, который имеет наименьшее
вначение в последовательности кодов ЕС ЭВМ — шестнадцатеричное
вначение '00'. Этот код не имеет изображения;
КАВЫЧКА (КАВЫЧКИ) — представляет одну или несколько
кавычек и может использоваться, например, для вывода на печать ка-
вычек, которые не могут быть представлены в строке литер нечислового
литерала. Слово КАВЫЧКА (КАВЫЧКИ) не может использоваться
вместо кавычек, ограничивающих нечисловой литерал;
ВСЕ литерал — представляет одно или несколько повторений стро-
ки литер, составляющих литерал. Литерал должен быть нечисловым
литералом или стандартной константой, отличной от ВСЕ. Когда ис-
пользуется стандартная константа, слово ВСЕ лишнее и используется
только для удобства при чтении.
1.1.7. Специальные регистры
Специальные регистры — это области основной памяти, которые
автоматически резервируются транслятором для хранения информа-
ции, создаваемой при использовании отдельных средств языка. Име-
на специальных регистров являются зарезервированными словами.
С каждым специальным регистром транслятором связывается неявное
описание, поэтому специальные регистры не требуется описывать в
программе. Имена специальных регистров и связываемые с ними неяв-
19
ные описания приведены в табл. 1. В графе примечаний указано назва-
ние модуля, которому принадлежит специальный регистр, и ссылка на
место, где описывается применение регистра.
Таблица I
Имя епециалмеге региетра Неявное .писаяае Примечание
СЧЕТЧИК ШАБЛОН 9(5) ДЛЯ ВЫЧИСЛЕНИЙ Ядро (п.5,3.2)
СЧЕТЧИК-СТРОК ШАБЛОН 9(5) ДЛЯ ВЫЧИСЛЕНИИ-3 Генератор отчетов (п.9.8)
СЧЕТЧИК-СТРАНИЦ ШАБЛОН 9(5) ДЛЯ ВЫЧИСЛЕНИЙ-3 Генератор отчетов (п.9Л)
ДАТУ ШАБЛОН Х(8) Ядро (п. 1.1.7)
ВРЕМЯ ШАБЛОН 9(6) ДЛЯ ВЫДАЧИ Ядро (п.1.1.7)
ОБЩ-РЕГИСТР (только для ДОС EG) ШАБЛОН X(U) Ядро (п.1.1.7)
ЧИСЛО-КАТУШЕК ШАБЛОН 3999 ДЛЯ Последовательный доступ
(только для flOG EG) ВЫЧИСЛЕНИЙ (п.3.2.1.2)
КОД-ВОЗВРАТА (толь- ШАБЛОН 39(4) ДЛЯ Связь между программами
ко для OG EG) ВЫЧИСЛЕНИИ (п.11.5)
КОД-ВОЗВРАТА-МЕТ- ШАБЛОН X Последовательный доступ
КИ (только для OG EG) (п.5.5.9)
КОД-ВОЗВРАТА-СОРТ ШАБЛОН 39(4) ДЛЯ ВЫЧИСЛЕНИЙ Сортировка (п.8.3.4)
РАЗМЕР-ФАЙЛА-СОРТ ШАБЛОН 39(8) ДЛЯ ВЫЧИСЛЕНИЙ Сортировка (п.8.3.4)
ПАМЯТЬ-GOPT ШАБЛОН 39(8) ДЛЯ ВЫЧИСЛЕНИЙ Сортировиа (п.8.3.4)
РЕЖИМ-СОРТ ШАБЛОН 39(5) ДЛЯ ВЫЧИСЛЕНИЙ Сортировка (п.8.3.4)
Специальный регистр СЧЕТЧИК используется для хранения ин-
формации, вырабатываемой оператором ПРОСМОТРЕТЬ, и может иа-
пользоватьвя в качестве операнда всюду, где допускается ивпольв®-
вание элементарного целого числового данного.
Специальные регистры ДАТУ и ВРЕМЯ используются для полу-
чения соответственно текущей даты и времени, хранящихся в машине.
Дата становится доступной в специальном регистре ДАТУ в формате
ММ/ДД/ГГ (месяц/день/год) или (только для ДОС ЕС) ДД/ММ/ГГ,
а время — в специальном регистре ВРЕМЯ в формате ЧЧММСС (часы,
минуты, секунды). Специальные регистры ДАТУ и ВРЕМЯ могут ис-
пользоваться только в качестве посылаемого поля в операторе ПОМЕ-
СТИТЬ.
Специальный регистр ОБЩ-РЕГИСТР (только для ДОС ЕС) ие-
пользуется для передачи информации между различными шагами одно-
го задания и позволяет обратиться к содержимому байт • 12-го по 22-й
области связи Управляющей программы,- Этот специальный регистр
может использоваться только в качестве посылаемого или принимаю-
20
щего пола к операторе ПОМЕСТИТЬ. Если он используется в качест-
ве принимающего поля, размер посылаемого поля должен быть ра-
вен 11 байтам.
1.1.8. Запись программы на бланках и перфорация
Транслятор Кобола воспринимает исходную программу, написан-
ную в стандартном формате, и выдает распечатку исходной программы
в том же формате. Стандартный формат записи исходных программ
обеспечивается стандартным форматом бланка кодирования (рис. 1).
Каждая строка бланка перфорируется на отдельной карте.
Строка бланка имеет 5 областей: область номера следования
(колонки 1—6); область продолжения (колонка 7); область А (колонки
8-11); область В (колонки 12—72); область идентификации программы
(колонки 73—80).
Для записи исходной программы используются области А и В.
Область номера следования используется для цифровой идентифи-
кации каждой строки, которая должна быть протранслирована транс-
лятором, и содержит шесть цифр номера следования. Использование
номеров следования необязательно. Если номера следования указы-
ваются, они должны быть в возрастающем порядке. Если при вводе
исходной программы этот порядок нарушается, выдается предупреж-
дающее сообщение. Проверка последовательности номеров следования
может не производиться, если в управляющем операторе CBL трансля-
тора для ДОС ЕС или в операторе ЕХЕС управления заданиями для
ОС ЕС задан специальный режим трансляции.
Любое предложение или статья, которые требуют более одной
строки, могут продолжаться на следующей строке или строках в об-
ласти В. Эти последующие строки называются строками про-
должения. Строка, которая требует продолжения, называется
продолжаемой строкой.
Область продолжения строки используется при продолжении пред-
ложения или статьи только тогда, когда строка продолжения содер-
жит часть слова или литерала, начатого в предыдущей строке (т. е.
слово или литерал переносится с одной строки на другую).
При переносе нечислового литерала с одной строки на другую в 7-ю
колонку строки продолжения помещается дефис, а продолжаемая часть
литерала начинается с кавычки в любом месте области В. Все пробелы
в конце продолжаемой строки и любые пробелы, следующие за кавыч-
кой в строке продолжения и предшествующие кавычке, заключающей
литерал, рассматриваются как часть литерала.
Когда слово или числовой литерал переносится с одной строки на
другую, в 7-ю колонку строки продолжения должен быть помещен де-
фис, чтобы указать, что первая отличная от пробела литера в области
В строки продолжения должна следовать за последней отличной от
пробела литерой продолжаемой строки без пропусков между ними.
Область А и область В. В области А (колонки 8—11) должны начи-
наться заголовки разделов, заголовки секций, имена параграфов,
индикаторы уровней и некоторые номера уровней. Область В (колон-
ки 12—72) используется для записи фраз и операторов программы.
21
ЕС ЭВМ КОБОЛ Программа Программист Дата Лист Листов
/1шт 1 Строга 8 7 А 8 11 в 12 15 20 25 30 35 КО К5 50 55 ВО 55 70 72 Менпшфикаиия 75 80
010 1 ' 1-1 1 1 1 | 1 1 1 . 1 1 Г 1 1 1 I..1 1 1 1 1 1 1 1 1 1 1 1 t 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 1 1 1 1 1 1 1 1 1 > 1 1 1 t 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 I 1 1 1 1 I > 1 1 1 I r 1 1 1 | 1 1 t 1 | 1 1 1 1 | 1 1 1 1 | 1 1 i 1 | 1 1 1 t | 1 1 1 t | i 1 1 1 | 1 1 1 1 1 1 1
03 0 1 1 1 1 I 1 1 I 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 t 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1
око . J 1 1 | 1 1 1 1 | 1 1 1 I | 1 1 1 . 1 | 1 1 ' 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 I 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | Г 1 1 1 1 i 1
. , . 1 1 1 1 ‘ 1 । 1 1 » 1 1 1 -1 1 । -L 1 t -1- 1 1 1 1 t-J 1 1-1 1 1 1 1 1_L I 1 1 1 1 1 1 l_l 1 t. 1 1 1 1 1 1 1 I Illi III
. , < Illi 1 1 > 1 1 1 1 1 I i i i -1 t_l 1 1 1 lilt t i i i i I t i i i 1 1 i i i 1 " 1 'I — "1 1- t i l_j L_i l t2j L i i i_t_1 i < I It til
- Р7Р 1-11 1 t 1 1—1 1 1 1 1 1 1 1 f 1 1 t I 1 1 1 1 1 1 1 1 1 t 1 1 1 I 1 1 1 1 1 1 1 1 1 t 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 I 1 1
—1 I — °РР 1 1 ,1 | , 1 l -l 1 l-t 1 | 1 | l 1 1 t | i 1 1 t | 1 1 1 1 | 1 1 1 1 | 1 1 l t I 1 1 1 I | 1 J t । I i 1 i t | 1 t i t | 1 till 111
- 1 - Ш.. 1. 1 1 -1 I 1 | 1 I i l | 1 1 l 1 | l l 1 | > i l i | 1 i t 1 | i l l i | i l l l ] l t i i | i i i t I t i i i | i i i i I t 1 1 1 1 1 1 1
. , ,1.0.0 .1 i l | i i t l 1 1 i i l 1 I i 1 i 1 i i i > | i i i i | i l i i | i i i i | i i i i | t t t > 1 t t > > | i i i t | t till III
1 1 1 | 1 1 I 1 | ' 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 t 1 1 | 1 1 1 1 | 1 1 L 1 | 1 I 1 1 | 1 l i 1 | t 1 1 J I 1 1 1 1 | 1 Г 1 II III
. , .1.0.0 1 I I | 1 1 1 1 | 1 1 I I | I I I « | I < I I | i t t 1 | 1 < > 1 | t 1 i 1 | > 1 ) t | I i 1 1 | 1 t i f | l Г 1 1 | 1 1 1 1 1 1 1 1
1-1 1. —1 1 1-1 1 | .l 1 .1 —1—| i—1——L..1 | 1 .1 _L. 1 | 1 1 1 1 | 1 1 1 1 | 1 I 1 1 I J 1 1 1 | 1 1 1 1 | 1 I I I | I 1 1 I 1 1 1 I 1 1 1 1 1
Ш.. 1 I » I >> | > > 1 1 | » t 1 1 | 1 1 t 1 | 1 1 1 1 | 1 1 1 1 | i 1 1 f | 1 1 1 i | 1 1 1 I | 1 1 t t 1 t 1 1 1 | I 1 1 1 | > 1 1 1 1 1 1 1
- 1-1 1 . 1 I I | I 1 1 1 | 1 1 1 1 | 1 I 1 1 | 1 1 1 > | J 1 1 1 | 1 i 1 1- | i 1 i 1 | t 1 1 1 | J 1 t 1 | 1 1 1 | 1 1 1 l | l 1 1 1 1 1 1 1
. .1.SP - 1 1 1 1 I I | I I I I | I t 1 1 | t 1 1 1 | 1 1 1 > j i 1 1 1 | 1 1 1 1 1 1 1 1 1 | 1 1 1 1 j I 1 I t | 1 1 I 1 I i 1 I 1 | j I I 1 I 1 I 1
. Р7Р - 1 1 I 1 1 | 1 I 1 1 | 1 1 1 1 | 1 1 1 | 1 l 1 1 | 1 1 1 1 | l 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 i I 1 | t
J80 г 1 I 1 I » J । » I 1 | I 1 1 1 | 1 1 1 1 | 1 1 I 1 | 1 1 1 1 | t 1 1 l | 1 1 1 1 | 1 1 I 1 I i l l « | 1 t l l | 1 1 1 1 | I I 1 1 1 I 1 I
190 _ 1 — 1 1 1 1 1 | 1 1 1 t | 1 1 I 1 | 1 1 I 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 > | 1 1 1 1 | 1 1 1 1 | 1 1 I i | ) 1 ! i | 1 t 1 1 | 1
, 2-РР 1 1 1 1 i I | i i I i | 1 i i i | 1 1 t i | i 1 i i | 1 i 1 1 | i t i 1 | i 1 I > | 1 1 i t | i i i i | i > i t | i i i I | t 1 1 1 I 1 1 I
' 1 1 i i i | i i I i | 1 1 I I | i i I i | i I i i | t i i | I I t t | i t t i | i i i | > t i i j i i । i I t i i j |
1 1 1 1 i i | < 1 i | I t > 1 | i i i i | I I 1 I | t I i 1 | I । । > | । । । 1 | I i । t | । । i । | i । > । | i a < | । J 1 a .
i I | i i | i 1 t i | i t > | i i i i | i > i | i | i i a I | I i i I | i i i i | 1 f i i | < I i i | i 1 1 1 I 1 1 1
i i 1 | i 1 I i | 1 1 i 1 | 1 1 I i | t 1 1 1 | 1 I i i | t 1 I t | t i « i | i t i i | > i i i | t 1 i I | < I i | i i , .1 i -« a . 1 I | I I I »
м iljllllu. 11111 *- 1 1 J-1 » » « 1 1 1 1 * 1 1 1 i 1 1 » « 1 1 1 । 1 1 1-1 1-1 1 1 i-L-.J ‘ 1 1 1 1 -*-Р-
Рис. 1. Стандартный формат бланка кодирования
Заголовок раздела должен быть первой строкой в разделе. Заголо-
вок раздела начинается в области А со слова РАЗДЕЛ, за которым
следует пробел, имя раздела и точка. Если эта программа вызывается
другой программой, за словами РАЗДЕЛ ПРОЦЕДУР могут следовать
пробел и фраза ИСПОЛЬЗУЯ. В той строке, где расположен заголовок
раздела, не должно быть никакого другого текста.
Заголовок секции начинается в области А любой строки, следующей
за заголовком раздела, со слова СЕКЦИЯ. За словом СЕКЦИЯ
следует пробел, имя секции и точка. Если требуется сегментировать
программу, за именем секции через пробел может следовать номер
сегмента.
Имя параграфа начинается в области А любой строки, следующей
за заголовком раздела или секции. За ним следует точка и пробел. Пер-
вое предложение параграфа начинается в любом месте области В той
же строки, где и имя параграфа, или следующей строки. Все следующие
предложения параграфа должны записываться также в области В.
Индикатор уровня начинается в области А, за ним в области В
следует связанное с ним имя и соответствующая информация. Номер
уровня 01(77) начинается в области А, за ним в области В следует свя-
занное с ним имя данного и соответствующая описательная информа-
ция. Номера уровней от 02 до 49, 66 или 88 могут начинаться в любом
месте области А или области В. За номером уровня в области В сле-
дуют связанные с ним имя данного и описательная информация.
Область идентификации программы предназначена для идентифи-
кации строк программы, закаталогизированной в библиотеку исходных
текстов, и используется системными программами обслуживания биб-
лиотек.
Пустые строки. Пустая строка — это строка, которая в колонках
7—72 содержит только пробелы. Пустая строка может появиться в лю-
бом месте исходной программы, только не непосредственно перед стро-
кой продолжения.
Операторы управления трансляцией специального типа ОСНОВА,
ВСТАВИТЬ, УДАЛИТЬ, ОТЛАДКА могут записываться в любом мес-
те строки с 1-й по 72-ю колонку; в строке, содержащей такой оператор,
не должно быть никакой другой информации.
Операторы управления трансляцией специального типа ПРОГОН,
ПРОПУСК!, ПРОПУСК2, ПРОПУСКЗ могут записываться в любом
месте области В строки; в строке, содержащей такой оператор, не долж-
но быть никакой другой информации, кроме, возможно, номера следо-
вания. Эти операторы предназначены для управления форматом рас-
печатки исходной программы и могут быть включены в программу в лю-
бом месте.
Оператор ПРОГОН указывает, что следующая за ним строка исход-
ной программы должна начинаться с начала новой страницы.
Формат:
ПРОГОН СТРАНИЦЫ
23
Операторы ПРОПУСКЕ ПРОПУСК2, ПРОПУСКЗ указывают, чтв
перед печатью следующей за ними строки исходной программы должна
быть пропущена соответственно одна, две или три пустые строки.
Формат:
ПРОПУСК!
пропуска
ПРОПУСКЗ
При написании исходной программы на Коболе должны соблюдать-
ся следующие правила пунктуации:
а) если какая-нибудь литера пунктуации указана в формате, она
требуется в программе;
б) перед точкой, точкой с запятой или запятой не должно быть про-
бела, но пробел должен следовать за ними; г
в) пробел не должен непосредственно следовать за левой круглой
скобкой и непосредственно предшествовать правой круглой скобке;
г) по крайней мере один пробел должен появиться между двумя
последовательными словами и (или) выражениями, заключенными в
скобки, и (или) литералами. Два или более последовательных пробела
воспринимаются как один пробел, если только они не находятся в не-
числовом литерале;
д) знаки арифметических операций, знак = (равно) и знаки усло-
вия отношения должны выделяться с двух сторон пробелами. Знаку
одноместной операции может предшествовать левая круглая скобка;
е) запятая может использоваться в качестве разделителя между
последовательными операндами оператора. Операнд оператора пред-
ставлен в форматах как слово, напечатанное строчными буквами;
ж) запятая или точка с запятой могут использоваться для разделе-
ния отдельных фраз. Например, ЗАПИСИ ДАННЫХ ЗАП-1, В ЗА-
ПИСИ 80 ЛИТЕР;
з) точка с запятой может использоваться для разделения отдель-
ных операторов. Например, СЛОЖИТЬ Al С В1; ОТНЯТЬ В1 ОТ
С1.
В любое место программы могут быть включены строки коммен-
тариев. Строка'комментариев идентифицируется литерой * (звездочка)
в 7-й колонке строки. Строка комментариев не может непосредственно
предшествовать строке продолжения.
1.2. МЕТОДЫ ОБРАБОТКИ ФАЙЛОВ
1.2.1. Общие сведения
В Коболе ЕС ЭВМ могут обрабатываться файлы на перфокартах,
печати, магнитных лентах и магнитных дисках.
Файлы на носителях данных могут быть представлены со стандарт-
ными метками (системными или пользователя), с нестандартными мет-
ками или без меток. Причем наличие стандартных меток пользователя
всегда предполагает присутствие стандартных системных меток. Фай-
24
лы на магнитных дисках всегда должны иметь стандартные метки,
файлы на магнитных лентах могут быть со стандартными метками, с не-
стандартными метками, либо вообще без меток. Файлы на перфокар-
тах и файлы печати меток не имеют.
Логические записи в файлах могут быть представлены в одном из
четырех форматов, допустимых в ЕС ЭВМ: фиксированном (формате F),
неопределенном (формате U), переменном (формате V) и сегментиро-
ванном (формате S). В фиксированном формате все записи имеют оди-
наковую длину, в остальных форматах записи могут иметь разную дли-
ну. В переменном и сегментированном форматах длина записи указы-
вается в самой логической записи в отличие от остальных форматов,
в которых длина записи в логической записи не присутствует. Сегмен-
тированный формат отличается от переменного тем, что при таком фор-
мате длина логической записи может превышать д^ину физической за-
писи (блока). Более детально форматы записей рассматриваются в опи-
сании фразы МЕТОД ЗАПИСИ.
1.2.2. Типы организации файлов
Под организацией файла будем понимать его структуру на носителе
данных, т. е. в физическом файле. Файлы, обрабатываемые в Коболе
ЕС ЭВМ, могут иметь последовательную, прямую, индексно-последо-
вательную и (только для ОС ЕС) относительную организацию.
При последовательной организации записи раз-
мещаются на носителе в той же физической последовательности, в кото-
рой они поступают. При чтении такого файла записи становятся до-
ступными в том порядке, в каком они были записаны, или обратном
порядке (что возможно только для файлов на магнитной ленте). Нель-
зя прочесть некоторую запись, не прочитав предварительно всех пред-
шествующих ей записей. Такая организация файлов должна приме-
няться для файлов на магнитных лентах и на носителях для устройств
одиночных записей (печатающего устройства и перфокарточных
устройств ввода и вывода) и может применяться для файлов на запоми-
нающих устройствах с произвольным обращением (например, для
файлов на магнитных дисках).
При прямо йоргаиизации файла, которая возможна
только для запоминающих устройств с произвольным обращением,
расположением записей в физическом файле управляет программист
путем определения некоторого данного в программе в качестве «факти-
ческого ключа». Значение фактического ключа определяет дорожку на
пакете магнитных дисков (фактическую или относительную), на кото-
рой располагается запись, и однозначно идентифицирует запись на
дорожке. В соответствии с назначением фактический ключ состоит из
двух компонентов: идентификатора дорожки и идентификатора записи.
Идентификатор дорожкн задается в форме двоичного числа при отно-
сительной адресации дорожки или (только для ДОС ЕС) в форме
MBBCCHHR, где М — номер тома, СС — номер цилиндра, НН —
номер дорожки на цилиндре при фактической адресации дорожки.
Детальное описание полей см. п. 3.2,1.5. Идентификатор записи может
25
представлять любое данное, связанное с записью, которое однозначно
ее идентифицирует. Например, это может быть табельный номер или
фамилия рабочего. При прямой организации в любой момент времени
доступна любая запись файла. Для того чтобы извлечь запись, нужно
указать значение фактического ключа требуемой записи.
В большинстве случаев в логической записи отсутствует данное,
значение которого могло бы быть адресом дорожки на пакете магнит-
ных дисков, или диапазон значений данного значительно превышает
количество используемых значений. Например, табельные номера ра-
ботающих могут иметь значения от 0001 до 9999, из которых исполь-
зуются в данный момент только 3000.. Поэтому адрес дорожки обычно
получается путем преобразования одного из данных записи (аргумен-
та) с помощью некоторого алгоритма, ограничивающего, диапазон ад-
ресов. Это преобразование называется рандомизацией. Ран-
домизация требуется также, когда дйнное, используемое для нахож-
дения адреса дорожки, нецифровое. Методы рандомизации не исклю-
чают возможности получения одного и того же адреса для различных
значений аргумента (т. е. синонимов). Одним из способов уменьшения
числа синонимов является выделение большего места, чем фактически
требуется для хранения всех записей файла. Обычно для файла выде-
ляется на 20% больше места, чем требуется фактически.
Запись, которая записывается по адресу, полученному по алго-
ритму рандомизации, называется основной. Любые другие записи,
для которых по алгоритму рандомизации получается тот же адрес, на-
зываются записями переполнения.
В каждом конкретном случае способ рандомизации определяется
программистом. При выборе метода рандомизации надо учитывать сле-
дующие факторы:
а)- любое значение аргумента должно рандомизироваться в адрес
из заданного диапазона; "
б) адреса следует распределять в заданном диапазоне равномерно,
чтобы было по возможности меньше синонимов (записей переполнения),
так как на определение местоположения таких записей переполнения
понадобится добавочное время.
Существует много способов рандомизации. Различные способы ран-
домизации описаны в книге «Введение в запоминающие устройства
прямого доступа и методы организации данных» {51. Простейший из
способов рандомизации — деление с остатком состоит в следующем:
аргумент делится на простое число, близкое к числу адресов, отведен-
ных под файл. Остаток используется для определения адреса.
При относительной адресации дорожки этот остаток и является
адресом. При фактической адресации (только для ДОС ЕС) полученное
число нужно преобразовать в фактический адрес, прибавив смещение
и разделив на число дорожек на цилиндре (10 — для' НМД ЕС-5052,
20 — для НМД ЕС-5061), частное дает номер цилиндра, остаток — но-
мер дорожки. Этот метод рандомизации иллюстрируется в примере
программы п.6.1.
При относительной организации (только для ОС
ЕС) положение логической записи в файле определяется целой поло-
26
жительной величиной, указывающей относительную позицию (относи-
тельный номер) логической записи в файле. Позиция логической записи
определяется относительно первой записи в файле, которая имеет от-
носительный номер 0. Для идентификации записей при произвольном
доступе к файлу с относительной организацией используется данное,
определяемое в программе в качестве «номинального ключа». Для того
чтобы извлечь запись файла, нужно установить значение номинального
ключа на номер требуемой записи. Этот тип организации'применяется
только для файлов на запоминающих устройствах с произвольным
обращением.
При индексно-последовательней организа-
ции положение записи в файле определяется с помощью ключа, ко-
торый в отличие от фактического ключа при прямой организации и но-
минального ключа при относительной организации должен входить
в состав логической записи и может представлять собой любое данное
записи, которое однозначно идентифицирует эту запись. Это данное
объявляется программистом в качестве «ключа записи». Например,
ключом записи при индексно-последовательной организации может
служить непосредственно табельный номер или фамилия рабочего.
Физическим размещением записей в файле управляет операционная
система с помощью специальных индексов (указателей) нескольких
уровней. Индексы создаются системой на основе значений ключа за-
писи. При создании файла с индексно-последовательной организа-
цией входные записи должны быть упорядочены по возрастанию зна-
чений ключа записи. Этот тип организации файлов применим только
для файлов на запоминающих устройствах с произвольным обраще-
нием.
Физические принципы организации файлов на запоминающих уст-
ройствах с произвольным обращением и достоинства каждого типа ор-
ганизации файлов достаточно освещены в литературе [3, 4, 5]. Здесь
рассматриваются возможности и средства обработки таких файлов в
Коболе ЕС ЭВМ.
В дальнейшем для краткости файл с последовательной организа-
цией будет называться последовательным файлом, файл с прямой ор-
ганизацией — прямым файлом, файл с относительной организацией —
относительным файлом, а файл с индексно-последовательной органи-
зацией — индексным файлом. Организация файла, будучи определен-
ной при создании файла, не может быть изменена. Организация файла
определяется программистом во фразе НАЗНАЧИТЬ параграфа УП-
РАВЛЕНИЕ-ФАЙЛАМИ в разделе оборудования. В этом же парагра-
фе называются имена данных, которые будут служить соответствую-
щими ключами для осуществления доступа к записям файла.
Для последовательного файла никаких ключей не требуется.
Для прямого файла ключ указывается во фразе ФАКТИЧЕСКИЙ
КЛЮЧ, для относительного файла — во фразе НОМИНАЛЬНЫЙ
КЛЮЧ, для индексного файла — во фразе КЛЮЧ ЗАПИСИ. При
произвольном доступе ко индексному файлу требуется определить (во
фразе НОМИНАЛЬНЫЙ КЛЮЧ) еще один ключ, значение которого
будет указывать, какую запись требуется, например, извлечь из файла.
27
1.2.3. Методы доступа
Доступ к последовательному файлу может быть только последова-
тельным. Доступ к прямому, относительному и индексно-последова-
тельному файлам может быть последовательным или произвольным.
При последовательном доступе становится доступной очередная ло-
гическая запись. При произвольном доступе становится доступной
запись, значение ключа которой указано программистом.
Метод доступа к файлу в программе определяется фразой ДОСТУП
в разделе оборудования и водной и той же программе может’быть или
последовательным, или произвольным. Если есть необходимость в од-
ной и той же программе применить к файлу и последовательный, и про-
извольный доступ, файл должен быть описан дважды с разными внут-
ренними именами (именем файла в статье описания файла), но с оди-
наковым внешним именем (полем имени в системном имени фразы
НАЗНАЧИТЬ), т. е. один и тот же физический файл в программе бу-
дет логически рассматриваться как два файла.
1.2.4. Виды обработки
Все разнообразие видов обработки файлов на магнитных дисках
может быть сведено к следующим четырем основным операциям: созда-
нию файла, извлечению (чтению) записей файла, обновлению записей,
добавлению записей в файл. Допустимые в Коболе виды обработки фай-
лов при различной организации и применимые при этом методы досту-
па сведены в табл. 2 для ДОС ЕС и в табл. 3 для ОС ЕС. Последова-
тельный метод доступа обозначен ПС, произвольный — ПР. Прочерк
обозначает недопустимый вид обработки.
Таблица 2
Организация файла в ДОС ЕС Вид обработки и метод доступа*
создание чтение . обновление добавление
Последовательная ПС ПС
Прямая ПР ПР ПР ПР
ПС
Индексная ПС ПР ПР ПР.
ПС ПС
Для выполнения операций ввода-вывода над файлами в Коболе
имеются следующие основные операторы: ОТКРЫТЬ, ЧИТАТЬ, ПИ-
САТЬ, ОБНОВИТЬ и ЗАКРЫТЬ. По оператору ОТКРЫТЬ выпол-
няются проверка и (или) создание начальных меток файла, а по опе-
ратору ЗАКРЫТЬ — конечных. Оператор ЧИТАТЬ используется
при выполнении операций чтения и обновления файла, оператор ПИ-
САТЬ — при создании файла, обновлении и добавлении записей к фай-
лу, оператор ОБНОВИТЬ — при обновлении файла.
28
Таблица 3
Организация файла в ОС ЕС Вид обработки и метод доступа
создание чтение обновление добавление
Последовательная ПС пс ПС - -
Прямая ПР ПС ПР ПС ПР ПР
Индексная ПС ПР ПС ПР ПС ' ПР
Относительная ПС ПР ПС ПР ПР*
• Добавление возможно только путем обновления фиктивных записей.
Операция ввода-вывода, запущенная по оператору ЧИТАТЬ, ПИ-
САТЬ или ОБНОВИТЬ, может не завершиться успешно. Причиной
неуспешного завершения операции может быть неправильно заданное
значение ключа, неисправимый сбой на пакете магнитных дисков, от-
сутствие места для записи в выделенном для файла участке диска и др.
Ситуация неправильно заданного значения ключа называется ситуа-
цией недействительного ключа. Ситуация недействительного ключа
может быть обнаружена в программе использованием фразы ПРИ
ОШИБКЕ КЛЮЧА в операторе ввода-вывода или (только для ОС ЕС)
с помощью декларативной процедуры обработки ошибок ввода-выво-
да. Все остальные причины неуспешного выполнения операции ввода-
вывода опознаются с помощью декларативных процедур и рассматри-
ваются как стандартные ошибки ввода-вывода.
Если декларативная процедура определена (указанием оператора
ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ
с фразой ПОЛУЧАЯ вслед за заголовком секции в декларативной
части раздела процедур),• операционная система передает программе '
пользователя информацию о причине ненормального завершения опе-
рации, которую программист может проанализировать. В противном
случае задание снимается.
Подробная информация о причинах возникновения ситуации недей-
ствительного ключа содержится в описании операторов ввода-вывода,
а об ошибках ввода-вывода и возможностях продолжения обработки —
в описании оператора ИСПОЛЬЗОВАТЬ.
Для первоначального создания файл может открываться только
рак ВЫХОДНОЙ. Если для файла в данной программе будут выпол-
няться только операции чтения, файл должен быть открыт как ВХОД-
НОЙ.Если для файла предполагается выполнять как операции чтения,
так и операции записи (обновление или добавление),~файл должен от-
крываться как ВХОДНОЙ-ВЫХОДНОЙ.
1.2.5. Обзор методов обработки файлов
Совокупность организации файла и метода доступа к нему состав-
ляет метод обработки файла. Ниже дается краткий обзор применяе-
мых средств языка для различных методов обработки файлов. Пол-
29
ная информация о назначении и форматах этих элементов языка со-
. держится в соответствующих главах книги.
Последовательный доступ к прямому файлу в ДОС ЕС применим
только при чтении такого файла. Ключ указывать не требуется, одна-
ко, если указана фраза ФАКТИЧЕСКИЙ КЛЮЧ, при каждом выпол-
нении оператора ЧИТАТЬ ключ, связанный с записью, будет помещен
в поле, названное во фразе ФАКТИЧЕСКИЙ КЛЮЧ.
Произвольный доступ к прямому файлу в ДОС ЕС применим при
создании, чтёКии, обновлении и добавлении записей к файлу. При та-
ком доступе с файлом через фразу ФАКТИЧЕСКИЙ КЛЮЧ в разделе
оборудования обязательно должен быть связан ключ, который исполь-
зуется для определения местоположения записи.
При создании файла новая запись (вместе с управляющими полями,
включающими поле ключа, совпадающее с идентификатором записи в
поле ФАКТИЧЕСКИЙ КЛЮЧ) записывается на указанной дорожке
вслед за последней записью на ней.
По оператору ОТКРЫТЬ при создании прямого файла все дорожки,
назначенные файлу, автоматически инициализируются записями опи-
сания дорожки, поэтому никакой специальной форматизации дорожек
на магнитных дисках перед созданием файла не требуется. Следователь-
но, оператор ПИСАТЬ для выходного файла выполняется таким же
образом, как и оператор ПИСАТЬ, добавляющий записи к входному-
выходному файлу.
При чтении записей файла поиск записи производится только на ука-
занной дорожке (если не указана фраза ПРИМЕНИТЬ РАСШИРЕН-
НЫЙ-ПОИСК) или по всему цилиндру (если фраза ПРИМЕНИТЬ
РАСШИРЕННЫЙ ПОИСК указана). Если требуемая запись найдена,
область данных записи считывается в основную память. Если требуе-
мая запись не найдена, возникает ситуация недействительного ключа.
Последовательный доступ к прямому файлу в ОС ЕС применим при
создании и чтении прямого файла. При последовательном создании
прямого файла требуется указать фразу ФАКТИЧЕСКИЙ КЛЮЧ.
Данные записываются последовательно, но если программисту тре-
буется изменить номер дорожки, он должен перед выполнением опера-
тора ПИСАТЬ изменить значение идентификатора дорожки в поле
ФАКТИЧЕСКИЙ КЛЮЧ. Если номер дорожки в идентификаторе
дорожки поля ФАКТИЧЕСКИЙ КЛЮЧ больше номера последней до-
рожки, на которую производилась запись, остаток последней дорожки
и все промежуточные дорожки будут заполнены фиктивными записями
при фиксированном (F) формате записей данных или инициализиро-
ваны при неопределенном (U), переменном (V) и сегментированном
(S) форматах записей данных файла.
Фиктивная запись — это запись, первый байт идентификатора за-
писи для которой содержит значение стандартной константы НАИ-
БОЛЫНЕЕ-ЗНАЧЕНИЕ. Относительный номер- дорожки, равный
нулю, соответствует первой дорожке, отведенной файлу. Если началь-
ное значение номера дорожки отлично от нуля, все дорожки с нулевой
по дорожку, номер которой указан в идентификаторе дорожки поля
ФАКТИЧЕСКИЙ КЛЮЧ, будут заполнены фиктивными записями
30
или инициализированы записями описания дорожки. Когда на ука-
занной дорожке больше нет места, значение идентификатора дорожки
автоматически увеличивается на 1. Фиктивные записи будут автомати-
чески заменяться при добавлении записей к файлу, а записи описания
дорожки обновляться. При закрытии файла оставшееся место на теку-
щей дорожке и все следующие дорожки до дорожки, номер которой
определен фразой ГРАНИЦА ДОРОЖЕК в разделе оборудования, за-
полняются фиктивными записями или инициализируются. При закры-
тии тома многотомного файла дорожки, назначенные для текущего то-
ма, заполняются фиктивными записями или инициализируются, преж-
де чем произойдет переход на следующий том.
После выполнения оператора ПИСАТЬ, ЗАКРЫТЬ или ЗАКРЫТЬ
ТОМ относительный номер дорожки, на которую была записана по-
следняя запись (запись данных, описания дорожки или фиктивная
запись), помещается в идентификатор дорожки в поле фактического
ключа. При последовательном чтении прямого файла записи извле-
каются из файла в последовательности, соответствующей физической.
Фиктивные записи также являются доступными. При последователь-
ном чтении можно указывать фразу ФАКТИЧЕСКИЙ КЛЮЧ. В этом
случае содержимое поля ФАКТИЧЕСКИЙ КЛЮЧ, представляющее
идентификатор дорожки, не изменяются, а в идентификатор записи по-
мещается ключ прочитанной записи.
Произвольный доступ к прямому файлу в ОС ЕС применим при
создании, чтении, обновлении и добавлении записей к файлу. При про-
извольном доступе к прямому файлу фраза ФАКТИЧЕСКИЙ КЛЮЧ
обязательна.
При создании прямого файла по оператору ОТКРЫТЬ все дорожки,
назначенные файлу, заполняются фиктивными записями (для формата
F записей данных) или инициализируются (для форматов S, U, V).
Число заполняемых или инициализируемых дорожек определяется
фразой ГРАНИЦА ДОРОЖЕК или, если эта фраза не указана, пара-
метром SPACE в управляющем операторе DD. Поэтому оператор ПИ-
САТЬ для выходного файла выполняется точно так же, как и оператор
ПИСАТЬ, добавляющий записи к входному-выходному файлу.
При записи в файл новая запись (вместе с управляющими полями,
включающими поле ключа, совпадающее с идентификатором записи в
данном ФАКТИЧЕСКИЙ КЛЮЧ) записывается на указанной дорож-
ке вслед за последней записью на ней. Если на указанной дорожке нет
места для размещения требуемой записи, поиск места для записи мо-
жет быть расширен в еоответствии в параметром LIMCT в управляю-
щем операторе DD.
При извлечении и обновлении записей файла данное, указанное во
фразе ФАКТИЧЕСКИЙ КЛЮЧ, используется для определения дорож-
ки и нахождения конкретной записи на этой дорожке. Если требуемая
вапись найдена, область данных записи вчитывается в основную па-
мять в елучае оператора ЧИТАТЬ или заменяется новой записью в
случае оператора ОБНОВИТЬ. При чтении или обновлении записей
файла поиск записи производится только на указанной дорожке, если
31
только в управляющем операторе DD не задан расширенный поиск
для определенного числа дорожек или по всему файлу.
Последовательный доступ к относительному файлу в ОС ЕС при-
меним при создании и чтении файла. Относительный файл может быть
создан только последовательно. При создании относительного файла
может быть указана фраза НОМИНАЛЬНЫЙ КЛЮЧ. Если значение
данного НОМИНАЛЬНЫЙ КЛЮЧ больше, чем следующий последо-
вательный номер записи, система обеспечит запись необходимого коли-
чества фиктивных записей, чтобы запись данных находилась в указан-
ной относительной позиции. Фиктивные записи идентифицируются на-
личием значения стандартной константы НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ
в первом байте записи.
Если последняя дорожка файла не заполнена полностью валисями
данных, во время закрытия файла на эту дорожку дописываются фик-
тивные записи. Во время выполнения оператора ЗАКРЫТЬ ТОМ ини-
циализируются дорожки, выделенные для файла на текущем томе.
После выполнения операторов ПИСАТЬ, ЗАКРЫТЬ или ЗАКРЫТЬ
ТОМ относительный номер последней записанной записи помещается
в данное НОМИНАЛЬНЫЙ КЛЮЧ.
При последовательном чтении относительного файла записи извле-
каются в том порядке, в каком онй записывались. Фиктивные записи
тоже доступны.
Произвольный доступ к относительному файлу в ОС ЕС приме-
ним при чтении, обновлении и добавлении записей файла. Фраза
НОМИНАЛЬНЫЙ КЛЮЧ обязательна. Содержимое данного НОМИ-
НАЛЬНЫЙ КЛЮЧ указывает положение записи (номер записи) от-
носительно начала файла, начиная в нуля. Записи извлекаются из
файла на основании содержимого данного НОМИНАЛЬНЫЙ КЛЮЧ.
Записи можно обновлять. Добавлять записи к файлу нельзя, за ив-
ключением замены фиктивных записей новыми записями данных.
Последовательный доступ к индексному файлу применим при созда-
нии, чтении и обновлении файла. Для указания места ключа внутри
записи в разделе оборудования должна использоваться фраза КЛЮЧ
ЗАПИСИ.
Индексный файл может быть создан только последовательно, при-
чем записи должны подаваться в возрастающей последовательности
значений ключа, указанного во фразе КЛЮЧ ЗАПИСИ.
Упорядочение записей по возрастанию ключей должно быть вы-
полнено в соответствии в внутренней поеледовательновтыо кодов EG
ЭВМ. Поэтому, если р качестве ключа записи используется, напри-
мер, фамилия и записи файла упорядочены по ключу в соответствии
с русским алфавитом, ключ записи должен быть подвергнут перекоди-
ровке (см. оператор ПРЕОБРАЗОВАТЬ) перед выполнением опера-
тора ПИСАТЬ при создании^ файла в тем, чтобы последовательность
значений ключей была возрастающей в соответствии с внутренней по-
следовательностью кодов ЕС ЭВМ.
При последовательном чтении файла записи извлекаются в поряд-
ке их расположения в файле, соответствующем возрастающей последо-
вательности значений ключа. Если извлечение записей должно начи-
32
наться не с первой записи, должна быть также указана фраза НОМИ-
НАЛЬНЫЙ КЛЮЧ. Содержимое поля, названного во фразе НОМИ-
НАЛЬНЫЙ КЛЮЧ, используется для указания записи, с которой
следует начать обработку. В этом случае выполнению оператора ЧИ-
ТАТЬ должно предшествовать выполнение оператора ПОДВЕСТИ.
Место для вставки новых записей можно зарезервировать, записы-
вая фиктивные записи (только для ОС ЕС). Фиктивные записи иден-
тифицируются наличием значения стандартной константы НАИБОЛЬ-
ШЕЕ-ЗНАЧЕНИЕ в первом байте записи. Фиктивные записи при
последовательном извлечении записей недоступны.
Произвольный доступ к индексному файлу применим при извле-
чении, обновлении и добавлении записей к файлу. В этих случаях сле-
дует обязательно указать и фразу КЛЮЧ ЗАПИСИ, и фразу НОМИ-
НАЛЬНЫЙ КЛЮЧ. Запись считается найденной, если значение клю-
ча записи совпало со значением номинального ключа. При добавлении
или обновлении записи значение ключа записи должно быть таким же,
как значение номинального ключа.
Фиктивные записи (только для ОС ЕС) при произвольном извле-
чении ваписей доступны. Если при добавлении записей к файлу фик-
тивные записи выталкиваются из основной области они физически
удаляются и не записываются в область переполнения.
1.2.6. Интерфейс с системой
Для каждого файла, используемого в программе на Коболе, на ос-
новании его описания в разделе оборудования и данных транслятором
строится в рабочей программе таблица, используемая при выполнении
, операций ввода-вывода для этого файла. В ДОС ЕС — это таблица опи-
сания файла (таблица DTF), в ОС ЕС — это блок управления данными
(блок DCB).
Значения некоторых полей в этих таблицах устанавливаются во
время трансляции на основании фраз описания файла в разделе обо-
рудования и данных. Если для каких-то из этих полей соответствую-
щие фразы не указаны в исходной программе, для ДОС ЕС эти значе-
ния устанавливаются транслятором по умолчанию, а для ОС ЕС они
должны быть заданы в параметре DCB управляющего оператора DD
для этого файла или будут установлены по умолчанию во время выпол-
нения.
Ниже поясняется связь некоторых полей, содержащихся в таблице
DTF (только для ДОС ЕС) и блоке DCB (только для ОС ЕС), е фразами
описания файла в разделах оборудования и данных.
Максимальный размер блока. В этом поле содержится максималь-
ный размер области ввода-вывода файла. Для каждого файла, описан-
ного в исходной программе, в рабочей программе резервируется по
крайней мере одна область ввода-вывода (буфер), в которую вводится
физический блок на носителе данных. В общем случае обработка запи-
сей производится в области ввода-вывода. Размер области ввода-выво-
да подсчитывается и заносится транслятором в это поле на основании
2 Зак. 73
33
статей описания записей и фразы В БЛОКЕ статьи -описания файла
(см. п. 4.2.1). Если (только для ОС ЕС) программист указал фразу В
БЛОКЕ О ЗАПИСЕЙ, для заполнения этого поля в блоке DCB нужно
во время выполнения программы указать размер блока в подпараметре
BLKSIZE параметра DCB управляющего оператора DD.
Если в разделе оборудования имя файла указано во фразе ОБЩАЯ
ОБЛАСТЬ ЗАПИСИ (см. п.3.2.2.2), дополнительно к минимум одной
области ввода-вывода резервируется отдельная область, называемая
областью записи, которая является общей для всех файлов, назван-
ных в этой фразе. В этом случае записи с носителя данных попадают
в область ввода-вывода, затем пересылаются в область записи и уже в
этой области обрабатываются.
Количество областей ввода-вывода. Это поле устанавливается транв-
лятором на основании фразы РЕЗЕРВИРОВАТЬ, в которой указы-
вается количество областей ввода-вывода, отведенных для обработки
файла (см. п.3.2.1.3), или по умолчанию (только для ДОС ЕС). Если для
ОС ЕС фраза РЕЗЕРВИРОВАТЬ не указана, количество буферов,
назначенных файлу, может быть указано во время выполнения про-
граммы через подпараметр BUFNO параметра DCB управляющего опе-
ратора DD.
Внешнее имя файла. В это поле транслятором заносится внешнее
имя файла, указанное в системном имени во фразе НАЗНАЧИТЬ (см.
п. 3.2.1.2). Такое же имя должно быть задано в качестве имени опера-
тора DD, связанного с файлом, для ОС ЕС или имени файла в операторе
DLBL или TLBL для ДОС ЕС.
Метод доступа. Это поле заполняется транслятором на основании
фразы ДОСТУП (см. п. 3.2.1.4) и системного имени во фразе НАЗНА-
ЧИТЬ (см. п. 3.2.1.1).
Длина логической записи Это поле заполняется транслятором либо
на основании подсчитанного им размера записи файла, либо на осно-
вании фразы В ЗАПИСИ, если она указана (см. п. 4.2.2).
Формат записей файла Эго поле заполняется транслятором на ос-
новании фразы МЕТОД ЗАПИСИ (см. п. 4.2.3).
Длина , ключа. В это поле транслятором заносится размер данного,
указанного в одной из фраз КЛЮЧ ЗАПИСИ, ФАКТИЧЕСКИЙ
КЛЮЧ или НОМИНАЛЬНЫЙ КЛЮЧ.
Связь других фраз описания файла с языком управления заданиями
и управлением данными поясняется в описании этих фраз Следует за-
метить, что поля DCB (только для ОС ЕС), заполненные во время тран-
сляции, в общем случае не могут быть переопределены вовремя выпол-
нения. Характеристики файла, используемого в программе в качестве
входного или входного-выходного, должны совпадать с теми, которые
были определены для файла, когда он создавался как выходной.
31
1
.Часть
ЯДРО. ПОСЛЕДОВАТЕЛЬНЫЙ
И ПРОИЗВОЛЬНЫЙ ДОСТУП
2. РАЗДЕЛ ИДЕНТИФИКАЦИИ
Раздел идентификации является первым разделом программы на
языке Кобол. Он идентифицирует исходную и рабочую программы. До-
полнительно программист может включить в этот раздел некоторую
справочную информацию о программе, например, фамилию автора про-
граммы, наименование организации, дату написания и трансляции
программы.
Формат раздела:
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, имя-программы.
[АВТОР, [статья-комментарий]...]
[ПРЕДПРИЯТИЕ, [статья-комментарий]...]
[ДАТА-НАПИСАНИЯ. [статья-комментарийI...]
[ДАТА-ТРАНСЛЯЦИИ. [статья-комментарий]...]
I ПОЛ НОМОЧ И Я. [статья-комментарий]...] '
Единственным обязательным параграфом раздела идентификации
является параграф ПРОГРАММА, который должен быть первым па-
раграфом этого раздела. Остальные параграфы не обязательны. Если
эти параграфы включаются в раздел, они должны быть написаны в ука-
занном порядке. Однако транслятор будет воспринимать их правиль-
но в любом порядке. Каждая статья-комментарий может состоять из
любого сочетания литер кода ДКОИ, которое составляется по правилам
образования предложения и параграфа.
Имя-программы в параграфе ПРОГРАММА идентифицирует рабо-
чую программу Управляющей программе операционной системы. Имя-
2*
35
программы может быть образовано из следующего набора литер: цифр
0—9, заглавных букв латинского алфавита и дефиса по правилам об-
разования имени-процедуры.
Так как имя программы для операционной системы не может пре-
вышать 8 литер, в качестве имени программы транслятором будут ис-
пользоваться 8 первых литер из указанных в параграфе ПРОГРАММА.
Так как операционная система требует, чтобы первая литера имени
программы была буквой латинского алфавита и не допускает дефисов
в именах программ, транслятор выполняет следующие преобразова-
ния:
а) если первая литера имени является цифрой, цифра 0 будет за-
менена на букву J, цифры 1—9 — соответственно на буквы А—I;
б) дефисы в позициях со второй по восьмую заменяются цифрой 0.
Имя-программы должно быть уникальным.
Если в разделе идентификации присутствует параграф ДАТА-
ТРАНСЛЯЦИИ, во время трансляции в распечатку исходной програм-
мы вслед за заголовком параграфа будет вставлена системная дата. Если
этот параграф содержал статью комментарий, она будет заменена теку-
щей датой.
3. РАЗДЕЛ ОБОРУДОВАНИЯ
Основное назначение раздела оборудования заключается в описа-
нии цифровой ЭВМ, на которой будет транслироваться и выполняться
программа, и в установлении необходимых связей между остальными
разделами исходной программы и оборудованием цифровой ЭВМ.
Общая структура раздела следующая:
РАЗДЕЛ ОБОРУДОВАНИЕ.
СЕКЦИЯ КОНФИГУРАЦИИ.
параграф ИСХОДНАЯ-МАШИНА
параграф РАБОЧАЯ-МАШИНА
{параграф СПЕЦИАЛЬНЫЕ-ИМЕНА]
[СЕКЦИЯ ВВОДА-ВЫВОДА.
параграф УПРАВЛЕНИЕ-ФАЙЛАМИ
[параграф УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ]]
Секции и параграфы должны записываться в указанном порядке.
Заголовок раздела должен присутствовать в программе, даже если
никаких статей раздела оборудования не требуется.
Хотя формат предписывает обязательно использовать секцию кон-
фигурации в исходной программе, транслятор позволяет опускать эту
секцию. Если секция в программе отсутствует, заголовок секции также
должен отсутствовать.
36
3.1. СЕКЦИЯ КОНФИГУРАЦИИ
В секции конфигурации приводятся общие спецификации цифровых
ЭВМ: исходной машины, на которой программа транслируется, и ра-
бочей машины, на которой программа выполняется. Кроме того, в сек-
ции конфигурации программист может определить мнемонические
имена, соответствующие именам реализации, используемым в опера-
ционной системе.
3.1.1. Параграф ИСХОДНАЯ-МАШИНА
Параграф ИСХОДНАЯ-МАШИНА служит только для документа-
ции и описывает цифровую ЭВМ, на которой должна транслироваться
программа.
Формат:
ИСХОДНАЯ-МАШИНА. имя-реализации.
Имя-реализации — это слово следующей структуры: ECl-номер-
модели], представляющее название цифровой ЭВМ.
Например , ИСХОДНАЯ-МАШИНА. ЕС-1035.
3.1.2. Параграф РАБОЧАЯ-МАШИНА
В параграфе РАБОЧАЯ-МАШИНА описывается цифровая ЭВМ,
на которой должна выполняться программа.
Формат:
РАБОЧАЯ-МАШИНА, имя -реализации
СЛОВ
ЛИТЕР
МОДУЛЕЙ
[РАЗМЕР ПАМЯТИ целое
[ГРАНИЦА СЕГМЕНТОВ номер-сегмента]
[ПРОГРАММНЫЙ АЛФАВИТ имя-алфавита].
Имя-реализации — это слово такой же структуры, как и в пара-
графе ИСХОДНАЯ-МАШИНА, а именно’ ECl-номер-модели], пред-
ставляющее название цифровой ЭВМ. Оно должно следовать непо-
средственно за заголовком параграфа. Остальные фразы могут запи-
сываться в любом порядке.
Фраза РАЗМЕР ПАМЯТИ служит только для документации и про-
граммной совместимости при переходе ® одной цифровой ЭВМ на дру-
гую. В этой фразе указывается размер основной памяти, необходимый
для выполнения программы. Размер памяти можно указать в байтах
(вариант ЛИТЕР), в словах основной памяти (вариант СЛОВ) или
модулях (вариант МОДУЛЕЙ). Вариант МОДУЛЕЙ для указания
размера основной памяти в ЕС ЭВМ не применяется. Размер памяти
(в байтах), необходимой для выполнения программы, может быть опре-
делен из протокола редактирования.
Фраза ГРАНИЦА СЕГМЕНТОВ используется для управления гра-
ницей между постоянными и фиксированными перекрываемыми сег-
37
ментами. Она относится к средствам-сегментации программы и описана
в соответствующей главе.
Фраза ПРОГРАММНЫЙ АЛФАВИТ используется для указания
имени основной последовательности кодов, которая будет использовать-
ся при определении значения истинности нечисловых сравнений в дан-
ной программе. Основная последовательность кодов — это последова-
тельность, в которой воспринимаемые цифровой ЭВМ коды упорядоче-
ны для целей сортировки и сравнения. Нечисловые сравнения в про-
грамме —это сравнения, явно указанные в условиях отношения и ус-
ловиях имени условия (см. п. 5.2.6.1) и неявно предполагаемые алго-
ритмом выполнения оператора ИСКАТЬ ОСОБО (см. п. 7.2.3).
Указанная фразой ПРОГРАММНЫЙ АЛФАВИТ основная после-
довательность кодов определяет также множество буквенных литер,
которое будет применяться для определения истинности условия
класса.
Имя-алфавита должно быть одним из имен, определенных во фразе
имя-алфавита параграфа СПЕЦИАЛЬНЫЕ-ИМЕНА. Если фраза
ПРОГРАММНЫЙ АЛФАВИТ не указана, для сравнения будет ис-
пользоваться внутренняя основная последовательность кодов ЕС ЭВМ,
т. е. двоичный код для обмена и обработки информации (ДКОИ).
Пример
РАБОЧАЯ-МАШИНА. ЕС-1035 ГРАНИЦА СЕГМЕНТОВ 20
ПРОГРАММНЫЙ АЛФАВИТ код-1.
3.1.3. Параграф СПЕЦИАЛЬНЫЕ-ИМЕНА
В параграфе СПЕЦИАЛЬНЫЕ-ИМЕНА устанавливается соответ-
ствие между именами реализации и мнемоническими именами или име-
нами алфавитов, определяемыми программистом. Этот параграф может
использоваться также, чтобы обменять функции запятой и точки в
шаблонах и в числовых литералах. Кроме того, в этом параграфе про-
граммист может определить литеру, которая будет использоваться в
шаблоне в качестве валютного символа.
Формат для ДОС ЕС:
СПЕЦИАЛЬНЫЕ-ИМЕНА.
Иимя-реализации-1) 1
Нпитопоп i J ЕСТЬ мнемонпческое-имя . . .
k (лигерал-i j «...— ]
[имя-реализации-2 [ЕСТЬ мнемоническое-имя]
[ВКЛ 1 ГГВЫКЛ 1 Ъ
[ВКЛЮЧЕНО) ИМЯ-УСЛ°ВИЯ-1 [(вЫКЛЮЧЕНО) имя-условия-2J
1ВЫКЛ [ Г [ВКЛ | 11 1 ' ’ ‘
(выключено} имяусловия'2 (включено)™3^"1
[СПЕЦИАЛЬНЫЙ ] 1
имя-алфавита <
[ВНУТРЕННИЙ /
[ВАЛЮТНЫЙ ЗНАК литерал-2]
[ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ].
38
Формат для ОС ЕС:
СПЕЦИАЛЬНЫЕ-ИМЕНА.
[СПЕЦИАЛЬНЫЙ 11
имя‘алфавита |внутрЕННИЙ j • • •
[ВАЛЮТНЫЙ ЗНАК литерал-2]
[ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ].
Имя реализации-1 может быть выбрано из следующего списка:
SYSIPT (только для ДОС ЕС), SYSLST (только для ДОС ЕС), SYSPCH
(только для ДОС ЕС), SYSPUNCH, CONSOLE, С01-С12, CSP, SOI,
S02, SYSIN (только для ОС ЕС), SYSOUT (только для ОС ЕС).
Имена-реализации SYSIPT, SYSLST и SYSPCH в ДОС ЕС яв-
ляются символическими именами следующих системных логических
устройств: системного ввода (SYSIPT), системной печати (SYSLST) и
системного перфоратора (SYSrcH). Имена реализации SYSIN, SYSOUT
и SYSPUNCH являются символическими именами соответствующих
устройств в операционной системе ОС ЕС. Имя реализации CONSOLE
соответствует системному устройству связи с оператором ЭВМ, кото-
рое обычно представляет собой пишущую машинку.
Если указаны SYSLST, SYSPCH, SYSIPT, SYSIN, SYSOUT, SYS-
PUNCH или CONSOLE, связанные с ними мнемонические имена могут
использоваться в операторах ПРИНЯТЬ и ВЫДАТЬ. Каждое из этих
имен-реализации может появиться в параграфе СПЕЦИАЛЬНЫЕ-
ИМЕНА только однажды.
Если указаны С01-С12, CSP, S01 или S02, связанные с ними мне-
монические-имена могут использоваться в операторе ПИСАТЬ с фра-
зой ДО (ПОСЛЕ) ПРОДВИЖЕНИЯ. Эти имена-реализации представ-
ляют управляющие символы печати или выбора приемного кармана
перфокарточного уетройства вывода. Соответствующие им действия
указаны в табл. 4.
Таблица 4
Имя-реализации-1 Выполняемое действие
CSP Запрет пропуске строки на печатающем устройстве
С01 —С12 Прогон бумаги на печатающем устройстве соответст- венно до кода 01 —12 управляющей перфоленты
SOI, S02 Выбор приемного кармана 1 или 2 для перфокарточ- ного устройства вывода
Возможность определения и использования программистом мне-
монических имен вместо имен реализации в операторах раздела про-
цедур позволяет сделать раздел процедур независимым от конкретной
39
цифровой ЭВМ или операционной системы и избавить программиста
от переделок раздела процедур исходной программы при переходе от
одного типа ЭВМ к другому.
Литерал-1 в формате используется для указания кода, которым
должна идентифицироваться информация, выводимая генератором
отчетов (см. п.9 .3» 1.2). Литерал должен быть нечисловым и состоять из
одной литеры.
Имя-реализации-2 (только для ДОС ЕС) используется для именова-
ния бит в байте UPSI (системном байте программных переключателей)
и может быть указано в видеиР51-п, где п = 0, 1, ..., 7. UPSI-0
относится к биту 0 байта переключателей, UPSI-1 — к биту 1 и т. д.
Байт переключателей в программе — это 23-й байт области связи Уп-
равляющей программы ДОС ЕС. С состоянием переключателя «вклю-
чен», что соответствует значению 1 в бите переключателя, или «выклю-
чен», что соответствует значению 0 в бите переключателя, связывается
имя-условия. Это имя-условия используется для опроса состояния
переключателя в операторах раздела процедур (см. п. 5.2.6). Хотя бы
одно имя-условия должно соответствовать имени-реализации вида
UPSI-n. Мнемоническое-имя, второе имя-условия или и то, и другое мо-
гут быть также связаны с именем-реализации вида UPSl-n. Имена-
условий представляют собой эквивалент данных уровня 88 (см.п.4.3.1),
a UPSI-n и мнемоническое-имя можно рассматривать как условную
переменную, с помощью которой при необходимости может быть уточ-
нено имя-условия. Значение бит в байте UPSI задается с помощью опе-
раторов управления заданиями.
Байт UPSI может использоваться, например, для того, чтобы обеспе-
чить выполнение отдельных функций многофункциональной програм-
мы, выбор которых при каждом конкретном прогоне программы оп-
ределяется внешними обстоятельствами.
Фраза имя-алфавита используется для присвоения некоторого име-
ни основной последовательности кодов, которая будет применяться для
нечисловых сравнений или сортировки.
Вариант ВНУТРЕННИЙ фразы имя-алфавита обозначает внутрен-
нюю последовательность кодов ЕС ЭВМ.т.е.последовательность ДКОИ.
Вариант СПЕЦИАЛЬНЫЙ фразы имя-алфавита определяет спе-
циальную последовательность кодов, а именно: {, [ , ., <, (, +»
!, &, }, ], о, *, ), ;, —,—,/, |, ,, (подчеркивание), >, ?, (черта
сверху),,,, :, ,#, а (коммерческий знак)/ (апостроф), =, » (кавыч-
ки), \ , А, Б, В, Г, Д, Е, Ж, 3, И, Й, К, Л, М, Н, О, П, Р, С, Т, У,
Ф, X, Ц, Ч, Ш, Щ, Ы, Ь, Э, Ю, Я, D, F, G, I, J, L, N, Q, R, S, U, V,
W, Y, Z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. В этой последовательности буквы
упорядочены по русскому алфавиту.
Имя-алфавита, определенное в параграфе СПЕЦИАЛЬНЫЕ-
ИМЕНА, может быть указано во фразе ПРОГРАММНЫЙ АЛФАВИТ,
определяющей, какая последовательность кодов будет применяться
для нечисловых сравнений при выполнении программы, или во фразе
АЛФАВИТ оператора СОРТИРОВАТЬ, определяющей, какая после-
довательность кодов будет применяться при сортировке записей фай-
ла по нечисловым ключам.
40
Литерал-2, указанный во фразе ВАЛЮТНЫЙ ЗНАК, может ис-
пользоваться в строке литер шаблона для представления валютного
символа. Литерал должен быть нечисловым литералом из одной литеры
и не может быть представлен одной из следующих литер: 0, 1,2, 3, 4,
5, 6, 7, 8, 9, А, Б, В, Д, Е, 3, К.М.'П, Р, Т, X, _, /, *, +,
;, (,), "или'. Если фраза ВАЛЮТНЫЙ ЗНАК отсутствует, только лите-
ра о может использоваться в качестве валютного символа в строке ли-
тер шаблона.
Фраза ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ означает, что для ука-
вания позиции явной десятичной точки в втроке литер шаблона и в чис-
ловых литералах вместо точки будет использоватьвя запятая.
Пример 1.
СПЕЦИАЛЬНЫЕ-ИМЕНА. CONSOLE ЕСТЬ пишмаш{
код-1 СПЕЦИАЛЬНЫЙ! ДЕСЯТИЧНАЯ ЗАПЯТАЯ-
Пример 2 (только для ДОС ЕС).
СПЕЦИАЛЬНЫЕ-ИМЕНА. UPSI-0 ЕСТЬ переключатель-корректировка
ВКЛЮЧЕНО с-корректировкой ВЫКЛЮЧЕН© без-корректировки}
UPSI-7 ЕСТЬ переключатель-печати ВКЛ с-печатью.
3.2. СЕКЦИЯ ВВОДА-ВЫВОДА
В секпии ввода-вывода устанавливается связь оборудования циф- ]
ровой ЭВМ о файлами, обрабатываемыми в программе, и определяют-
ся специальные методы организации ввода-вывода, позволяющие ,
эффективнее выполнять передачу данных между внешней и основной
памятью.
Секция ввода-вывода может отсутствовать, если в программе не
используются файлы на носителях данных. Заголовок секции в таком \
случае должен быть опущен.
3.2.1. Параграф УПРАВЛЕНИЕ-ФАЙЛАМИ
В параграфе УПРАВЛЕНИЕ-ФАЙЛАМИ называются все файлы,
которые будут обрабатываться в программе, и определяются тип пе-
риферийного устройства, назначаемого файлу, организация файла и
метод доступа.
Общий формат!
УПРАВЛЕНИЕ-ФАЙЛАМИ.
{фраза ДЛЯ
фраза НАЗНАЧИТЬ
(фраза РЕЗЕРВИРОВАТЬ]
[фраза ДОСТУП]
[фраза ФАКТИЧЕСКИЙ КЛЮЧ]
[фраза КЛЮЧ ЗАПИСИ]
[фраза НОМИНАЛЬНЫЙ КЛЮЧ]
[фраза ОБЛАСТЬ ДОРОЖКИ]
[фраза ГРАНИЦА ДОРОЖЕК)*.}-..
* Использование этой фразы допустимо только в Коболе ОС ЕС.
41
Фраза ДЛЯ в статье должна быть первой, остальные фразы могут
указываться в любом порядке.
3.2.1.1. Фраза ДЛЯ
Во фразе ДЛЯ называется каждый файл, обрабатываемый в про-
грамме.
Формат:
ДЛЯ [НЕОБЯЗАТЕЛЬНОГО] имя-файла
Каждый файл, используемый в программе, должен быть назван в
этой фразе один и только один раз. При этом каждому такому файлу
в разделе данных должна соответствовать етатья описания файла (ОФ)
или статья описания сортируемого файла (ОС), в которой указано та-
кое же имя-файла Это имя-файла является внутренним для данной
программы, используется для ссылок на файл в процедурных операто-
рах программы и никак не связано с тем именем, которое будет иметь
этот файл на томе.
Вариант НЕОБЯЗАТЕЛЬНОГО может быть задан только для вход-
ных файлов с последовательным доступом и указывает, что при выпол-
нении рабочей программы обработка файла может иногда опускаться.
Однако так как отсутствие файла в рабочее время задается с помощью
операторов управления заданиями (параметром IGN в управляющем
операторе ASSGN для ДОС ЕС и параметром DUMMY или NULLFI-
LE в управляющем операторе DD для ОС ЕС), вариант НЕОБЯ-
ЗАТЕЛЬНОГО во фразе ДЛЯ служит только для документации.
Если файл не присутствует в рабочее время и это предусмотрено уп-
равляющим оператором, оператор ЧИТАТЬ для этого файла вызовет
выполнение повелительного оператора, указанного во фразе В КОН-
ЦЕ.
.3.2.12. Фргса НАЗНАЧИТЬ
Фраза НАЗНАЧИТЬ служит для указания типа и количества пери-
ферийных устройств, которые будут назначены файлу в рабочее время
Формат:
НАЗНАЧИТЬ [целое] имя-реализации-1 [имя-реализации-2]...
Целое определяет количество устройств ввода (вывода), назначае-
мых файлу, или (только для ДОС ЕС) количество катушек в файле
на магнитной ленте с нестандартными метками.
Так как операционная система ОС EG автоматически определяет
количество устройств ввода-вывода, целое указывать необязательно.
Если целое указано, оно воспринимается как комментарий.
В операционной системе ДОС ЕС для файлов без меток или ео стан-
дартными метками (системными или пользователя) нет необходимости
указывать целое. Когда целое указано для файлов со стандартными мет-
ками или для выходных файлов без меток на магнитной ленте, оно рас-
сматривается как комментарий. Если целое больше единицы для вход-
ных файлов без меток на магнитной ленте, в конце обработки каждой
катушки операционной системой ДОС ЕС выдается сообщение олера-
42
тору для получения от него информации о том, достигнут конец файла
или нет. Программист должен обеспечить оператора правильной ин-
формацией о количестве катушек в файле. Для многотомных входных
файлов с нестандартными метками в ДОС ЕС требуется указать целое.
Для таких файлов система не может отличить конец тома от конца фай-
ла и, следовательно, установить количество катушек в файле. В этом
случае целое используется для определения количества катушек в
файле. Это количество может быть изменено во время выполнения про-
граммы засылкой с помощью' оператора ПОМЕСТИТЬ ненулевого це-
лого, не превосходящего 255, в специальный регистр ЧИСЛО-КАТУ-
ШЕК перед открытием файла. Если ЧИСЛО-КАТУШЕК содержит
нуль во время открытия файла, используется целое, указанное во фра-
зе НАЗНАЧИТЬ. Если целое не указано, операционная система ДОС
ЕС подразумевает, что файл содержится на одной катушке.
Имя-реализации-1 — это слово следующей структуры:
а) для ДОС ЕС: 5У5ппп-класс-шифр-организация[-имя1;
б) для ОС ЕС: классЬшифр[-организация-имя.
Слово такой структуры будет называться также системным име-
нем. В системном имени ппп — это трехзначное число от ООО до 221.
SYSnnn в ДОС ЕС представляет символическое имя логического уст-
ройства программиста, которое назначается файлу.
Класс — это сочетание из двух литер, характеризующее класс уст-
ройства. Используются следующие сочетания: DA — для запоминаю-
щих устройств с произвольным обращением; UT — для запоминаю-
щих устройств с последовательным обращением; UR —для устройств
одиночных записей.
Файлы, которым назначается устройство класса4 DA, могут иметь
последовательную, прямую, индексную и (только для ОС ЕС) относи-
тельную организацию. Если организация прямая, относительная или
индексная, доступ может быть последовательным или произвольным.
Файлы, которым назначается устройство класса UR или UT, должны
иметь последовательную организацию.
Шифр — это сочетание четырех цифр, представляющее унифици-
рованный для ЕС ЭВМ шифр устройства. Могут быть использованы
следующие шифры устройств:
а) 5052 или 5061 (накопитель на магнитных дисках — НМД) для
устройств класса DA;
б) 5010 (накопитель на магнитной ленте — НМЛ), 5052 или 5061
(НМД) для устройств класса UT;
в) 7030 или 7035 (печатающее устройство), 6012 или 6016 (перфо-
карточное устройство ввода), 7010, 7012 или 7014 (перфокарточное
устройство вывода) для устройств класса UR.
Организация —это одна литера, которая указывает тип органи-
зации файла. Могут быть использованы следующие литеры:
S, если организация файла последовательная;
А, если организация файла прямая в фактической адресацией до-
рожки (только для ДОС ЕС);
D, если организация файла прямая с относительной адресацией до-
рожки;
43
U, если организация файла прямая с фактической адресацией до-
рожки и для обновления файла используется оператор ОБНОВИТЬ
(только для ДОС ЕС);
W, рели организация файла прямая в относительной адресацией
дорожки и для обновления файла используется оператор ОБНОВИТЬ;
I, если организация файла индексная;
R, если организация файла относительная (только для ОС ЕС).
Примечание. Если файл открывается как входной или выходной, U
эквивалентно A, a W эквивалентно D.
Для выбора правильного варианта поля организации в вивтемном
имени можно использовать табл. 5.
'.Таблица 5
Тип устройства Организация файла Доступ Адресация дорожки Поле организации „
НМЛ, перфокарточное устройство ввода, перфо- карточное уст- ройство вывода, печатающее устройство Последова- тельная Последова- тельный —— S
НМД Последова- тельная Последова- тельный S
НМД Прямая Последова- тельный Фактическая (только для ДОС ЕС) А (только для ДОС ЕС)
Относитель- ная D
Произволь- ный Фактическая UA (только для ДОС ЕС)
Относи- тельная W, D
НМД Индексная Последова- тельный — I
Произволь- ный — I
НМД Относитель- ная (только для ОС EG) Повледова- тельный — R (только для ОС ЕС)
Произволь- ный — R (только для OG EG)
44
Имя — это слово длиной от одной до семи литер в ДОС ЕС и от од-
ной до восьми литер в ОС ЕС, которое указывает внешнее имя файла,
под которым файл известен системе. Внешнее имя должно образовы-
ваться по тем же правилам, что и имя программы. Если имя указано,
такое же имя должно быть указано в качестве параметра «имя-файла»
в операторах управления заданием DLBL или TLBL для ДОС ЕС или
в качестве параметра «имя-DD» в управляющем операторе DD для
ОС ЕС при выполнении рабочей программы. Если имя не указано
(только для ДОС ЕС), в качестве внешнего имени файла используется
имя логического устройства (SYSnnn). Имя должно быть указано,
если одно и то же логическое устройство назначается нескольким фай-
лам, *
3.2.1.3. Фраза РЕЗЕРВИРОВАТЬ
Фраза РЕЗЕРВИРОВАТЬ используется для изменения количества
областей (буферов) ввода-вывода, которые отводятся транслятором для
последовательного файла или (только для ОС ЕС) индексного файла с
последовательным доступом. Она определяет количество дополнитель-
ных буферов к минимум одному буферу, который отводится файлу
автоматически.
Формат:
РЕЗЕРВИРОВАТЬ | nunft} ДОПОЛНИТЕЛЬНЫХ ОБЛАСТЕЙ
Целое для ДОС ЕС может иметь значение только 1. Если эта фраза
опущена или указано целое, равное 1, будет резервироваться один
дополнительный буфер, т. е. всего два буфера.
Целое для ОС ЕС может быть любым числом, не превышающим 254.
Если фраза РЕЗЕРВИРОВАТЬ не указана, но указана фраза ОБЩАЯ
ОБЛАСТЬ, резервируется одна дополнительная область. Если не ука-
заны фразы РЕЗЕРВИРОВАТЬ и ОБЩАЯ ОБЛАСТЬ, общее коли-
чество буферов определяется из управляющего оператора DD. Если
в DD не указано количество буферов, по умолчанию предполагаются
два буфера.
Если указан вариант НИ ОДНОЙ, дополнительная область резер-
вироваться не будет.
З.2.1.4. Фраза ДОСТУП
Фраза ДОСТУП определяет метод доступа к записям файла.
Формат:
nnTTVH f ПОСЛЕДОВАТЕЛЬНЫЙ 1
(произвольный-----------------I
Если эта фраза не указана, подразумевается, что к записям файла
будет осуществляться последовательный доступ.
Если указан или подразумевается вариант ДОСТУП ПОСЛЕДОВА-
ТЕЛЬНЫЙ, записи помещаются в файл или извлекаются из файла в
их физической последовательности. Последовательный доступ приме-
45
няется к файлам на магнитной ленте, на устройствах одиночных запи-
сей, а также может применяться для файлов на магнитных дисках.
Вариант ДОСТУП ПРОИЗВОЛЬНЫЙ может быть указан только
для файлов на магнитных дисках с прямой, индексной или (только для
ОС ЕС) относительной организацией. При произвольном доступе по-
следовательностью обработки записей управляет программист. Эта
последовательность базируется на ключе, связанном с каждой записью.
Ключ указывается программистом во фразе ФАКТИЧЕСКИЙ. КЛЮЧ
или НОМИНАЛЬНЫЙ КЛЮЧ в зависимости от типа организации
файла.
З.2.1.5. Фраза ФАКТИЧЕСКИЙ КЛ£)Ч
Во фразе ФАКТИЧЕСКИЙ КЛЮЧ программист указывает данное,
которое будет использоваться в качестве ключа для размещения или
извлечения логической записи при произвольном доступе к прямому
файлу. Значение ключа, названного во фразе ФАКТИЧЕСКИЙ КЛЮЧ,
для каждой записи, подлежащей обработке, обеспечивается програм-
мистом.
Формат:
ФАКТИЧЕСКИЙ КЛЮЧ имя-данного
Фраза ФАКТИЧЕСКИЙ КЛЮЧ обязательно должна быть указана
для файлов с прямой организацией, для которых фразой ДОСТУП
определен произвольный доступ к записям.
Перед выполнением операторов ЧИТАТЬ или ПИСАТЬ для фай-
лов с произвольным доступом в данное ФАКТИЧЕСКИЙ КЛЮЧ дол-
жен быть помещен адрес требуемой записи. При выполнении операто-
ра ЧИТАТЬ становится доступной логическая запись файла, найден-
ная операционной системой по значению данного, названного во фразе
ФАКТИЧЕСКИЙ КЛЮЧ. При выполнении оператора ПИСАТЬ за-
данная логическая запись записывается в определенное место на паке-
те магнитных дисков. Место для записи определяется в соответствии,
со значением данного, названного во фразе ФАКТИЧЕСКИЙ КЛЮЧ.
Если при создании файла на дорожке, указанной именем-данного,
нет свободного места для размещения записи, возникает ситуация
стандартной ошибки ввода-вывода. В этом случае для корректировки
адреса дорожки в ДОС ЕС программисту необходимо обеспечить де-
кларативную секцию с оператором ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАН-
ДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ. В ОС ЕС область поиска места
для записи может быть расширена до нескольких дорожек в соответ-
ствии с параметром LIMCT в управляющем операторе DD.
Фраза ФАКТИЧЕСКИЙ КЛЮЧ может быть указана при последо-
вательном чтении и (только для ОС ЕС) при последовательном созда-
нии прямого файла.
Имя-данного должно быть именем данного фиксированного раз-
мера, описанного в секции файлов, секции рабочей памяти или сек-
ции связи. Если имя-данного определено в секции файлов, оно не мо-
жет содержаться в файле, для которого оно является ключом.
46
Это данное должно состоять из двух компонентов:
а) идентификатора дорожки, указывающего адрес дорожки, на
которой нужно начать поиск записи или на которой надо разместить
новую запись;
б) идентификатора записи, или шифра, однозначно определяюще-
го запись на указанной дорожке и связанного непосредственно с за-
писью.
Идентификатор дорожки может быть задан двумя способами: че-
рез относительную или (только для ДОС ЕС) фактическую адресацию
дорожки.
При относительной адресации идентификатор дорожки указывает
адрес дорожки, на которую нужно поместить запись или с которой
надо начать поиск записи, относительно начала участка, назначенного
файлу. Операционная система обеспечивает необходимые преобразо-
вания для определения фактического адреса дорожки. Идентификатор
дорожки должен занимать 4 байта основной памяти и быть представ-
лен в двоичном виде. Его максимальное значение не должно превышать
16777215 для ДОС ЕС и 65535 для ОС ЕС.
При фактической адресации (только для ДОС ЕС) идентификатор
дорожки указывает фактический адрес дорожки, на которую нужно
поместить запись или с которой надо начать поиск записи. Он должен
занимать 8 байт основной памяти и иметь следующую структуру:
MBBCCHHR
где М — однобайтовый номер тома (может принимать значения от О
ДО 221);
ВВ — два нулевых байта;
СС — двубайтовый номер цилиндра (первый байт должен быть
нулевым, второй может содержать значения от 0 до 199);
НН — двубайтовый номер дорожки (первый байт должен быть ну-
левым, второй может содержать значения от 0 до 9 для НМД ЕС-5052
и от 0 до 19 для НМД ЕС-5061);
R — должно быть первоначально установлено программистом ва
НАИМЕНЫПЕЕ-ЗНАЧЕНИЕ. В дальнейшем ему не надо заниматься
этим байтом.
Все компоненты адреса должны быть представлены в двоичном ви-
де.
При фактической адресации дорожки операционной системой не
выполняется никаких преобразований идентификатора дорожки.
Идентификатор записи может представлять любое данное (груп-
повое или элементарное) длиной от 1 до 255 байт. Значение поля, от-
веденного под идентификатор записи, рассматривается в соответствии
с его описанием.
Запись считается найденной на данной дорожке, если идентифика-
тор записи в поле ФАКТИЧЕСКИЙ КЛЮЧ совпадает с идентификато-
ром записи в просматриваемом файле.
Пример описания фактического ключа при относительной адреса-
ции дорожки в ДОС ЕС:
47
РАЗДЕЛ ОБОРУДОВАНИЯ.
ДЛЯ сводка НАЗНАЧИТЬ SYS001-DA-5052-D
ФАКТИЧЕСКИЙ КЛЮЧ ф-ключ
ДОСТУП ПРОИЗВОЛЬНЫЙ.
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
01 ф-ключ.
02 дорожка ШАБЛОН 39(8) ДЛЯ ВЫЧИСЛЕНИЙ.
02 шифр ШАбЛОН Х(6).
В этом примере D в поле организации системного имени указывает,
что используется относительная адресация дорожки. Фраза ДЛЯ ВЫ-
ЧИСЛЕНИЙ указывает, что данное представляется в двоичном виде
(см. п. 4.3.5)
Пример описания фактического ключа при относительной адресации
дорожки в ОС ЕС:
РАЗДЕЛ ОБОРУДОВАНИI.
ДЛЯ еправочник НАЗНАЧИТЬ DA-D-SPRAV
ДОСТУП ПРОИЗВОЛЬНЫЙ
ФАКТИЧЕСКИЙ КЛЮЧ ключ-справочника.
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
01 ключ-справочника.
02 дорожка ШАБЛОН 39(5) ДЛЯ ВЫЧИСЛЕНИЙ.
02 таб-номер ШАБЛОН Х(5).
Пример описания фактического ключа при фактической адресации
дорожки в ДОС ЕС:
РАЗДЕЛ ОБОРУДОВАНИЯ.
ДЛЯ таблица НАЗНАЧИТЬ SYS00I-DA-5352-A
ДОСТУП ПРОИЗВОЛЬНЫЙ
ФАКТИЧЕСКИЙ КЛЮЧ ключ-таблицы.
РАЗДЕЛ ДАННЫХ.
СЕКЦЙЯ РАБОЧЕЙ-ПАМЯТИ.
01 описание-ключа.
02 поле-m ШАБЛОН 3999 ДЛЯ ВЫЧИСЛЕНИЙ ЗНАЧЕНИЕ 0.
02 поле-вв ШАБЛОН 399 ДЛЯ ВЫЧИСЛЕНИЙ ЗНАЧЕНИЕ 0.
02 поле -сс ШАБЛОН 3999 ДЛЯ ВЫЧИСЛЕНИЙ ЗНАЧЕНИЕ 10.
02 поле-hh ШАБЛОН 399 ДЛЯ ВЫЧИСЛЕНИЙ ЗНАЧЕНИЕ 0.
02 поле-г ШАБЛОН X ЗНАЧЕНИЕ НАИМЕНЬШЕЕ-ЗНАЧЕНИВ.
02 ид-записи ШАБЛОН Х(4).
01 описание-ключа-1 ПЕРЕОПРЕДЕЛЯЕТ описание-ключа.
02 ЗАПОЛНИТЕЛЬ ШАБЛОН X.
02 ключ-таблицы ШАБЛОН Х(12).
В этом примере идентификатор дорожки представляет собой сово-
купность пяти данных: поле-m, поле-вв, поле-сс, поле-hh и поле-г.
Данное поле-т, соответствующее параметру М идентификатора до-
48
рожки, занимает два байта памяти (о размере данных в памяти см.
п. 4.3.5), а по определению идентификатора дорожки параметр М
должен занимать только один байт. Лишний байт исключается из по-
ля ключа с помощью переопределения первоначального поля «описание-
ключа» полем «описание-ключа-1», в описании которого первой содер-
жится статья 02 ЗАПОЛНИТЕЛЬ ШАБЛОН X.
? З.2.1.6. Фраза КЛЮЧ ЗАПИСИ
Фраза КЛЮЧ ЗАПИСИ используется для осуществления доступа
к индексному файлу. В ней указывается данное в записях файла, кото-
рое является ключом записи.
Формат:
КЛЮЧ ЗАПИСИ имя-дагыогз
Имя-данного должно относиться к данному в записи'файла и иметь
фиксированную длину, не превышающую 255 байт. Имя-данного не
должно относиться к данному с плавающей точкой. Если в файле боль-
ше одного типа записей, идентичное поле должно быть в каждом описа-
нии записи и находиться на таком же месте от начала записи. Только
имена этих полей могут отличаться.
Фраза КЛЮЧ ЗАПИСИ всегда должна указываться для индексно-
го файла независимо от метода доступа, используемого при обработке
записей этого файла. При создании индексного файла записи должны
быть упорядочены в возрастающей последовательности данного, ука-
занного во фразе КЛЮЧ ЗАПИСИ.
Для следующих файлов ключ записи должен определяться так,
чтобы он не занимал позицию первого байта записи:
а) файл с неблокированными записями;
б) файл, из которого должны удаляться записи;
в) файл, в котором какой-либо ключ начинается с кода удаления
(кода стандартной константы НАИБОЛЫПЕЕ-ЗНАЧЕНИЕ).
В остальных случаях имя данного может появиться в любом месте
записи.
З.2.1.7. Фраза НОМИНАЛЬНЫЙ КЛЮЧ
Фраза НОМИНАЛЬНЫЙ КЛЮЧ используется для осуществления
произвольного доступа к индексному и (только для ОС ЕС) относитель-
ному файлу. Для индексного файла фраза определяет ключ извлекае-
мой записи. Для относительного файла она определяет номер (начиная
G нуля) выбираемой записи относительно начала файла.
Формат:
НОМИНАЛЬНЫЙ КЛЮЧ имя-данного _
Фраза должна быть указана для относительных (только для ОС
ЕС) и индексных файлов при произвольном доступе. Она также тре-
буется при последовательном доступе к индексному файлу, если ис-
пользуется оператор ПОДВЕСТИ, и может быть указана при создании
относительного файла (только для ОС ЕС).
49
Когда фраза НОМИНАЛЬНЫЙ КЛЮЧ используется для индекс-
ного файла, имя-данного должно подчиняться тем же правилам, что и
имя-данного во фразе КЛЮЧ ЗАПИСИ. Их описания должны быть
эквивалентны.
При произвольном доступе к индексному файлу перед выполнением
операторов ЧИТАТЬ,. ПИСАТЬ или ОБНОВИТЬ в данное НОМИ-
НАЛЬНЫЙ КЛЮЧ должно быть помещено значение ключа требуемой
записи. При извлечении записи это значение используется для нахож-
дения логической записи с таким же значением данного, указанного
во фразе КЛЮЧ ЗАПИСИ. При добавлении и обновлении записи оно
используется для нахождения места, где должна быть размещена за-
пись. Тем не менее, ключ записываемой или обновляемой записи дол-
жен быть также установлен на нужное значение, которое должно сов-
падать со значением номинального ключа.
Если при последовательном доступе к индексному файлу необхо-
димо начать обработку не с первой записи, в данное НОМИНАЛЬНЫЙ
КЛЮЧ надо поместить значение ключа записи, с которой требуется
начать обработку,и затем выполнить оператор ПОДВЕСТИ. Следую-
щий за этим оператор ЧИТАТЬ сделает эту запись доступной для обра-
ботки.
Когда фраза НОМИНАЛЬНЫЙ КЛЮЧ указана для относительно-
го файла (только для ОС ЕС), имя-данного должно относиться к дан-
ному, описанному в секции рабочей памяти, и подчиняться следующим
правилам:
а) оно должно занимать 4 байта основной памяти и быть представ-
лено в двоичном виде. Максимальное значение номинального ключа
не должно превышать 15728640;
б) его описание не должно подчиняться действию фразы ПОВТО-
РЯЕТСЯ с вариантом В ЗАВИСИМОСТИ ОТ или следовать за данным,
описанным с такой фразой.
При произвольном доступе к относительному файлу перед выпол-
нением операторов ЧИТАТЬ, ПИСАТЬ или ОБНОВИТЬ в данное
НОМИНАЛЬНЫЙ КЛЮЧ должен быть помещен относительный но-
мер записи. При выполнении оператора ЧИТАТЬ становится доступной
запись файла, относительный номер которой совпадает со значением
данного НОМИНАЛЬНЫЙ КЛЮЧ. При выполнении операторов
ПИСАТЬ или ОБНОВИТЬ относительный номер записи, указанный
значением данного НОМИНАЛЬНЫЙ КЛЮЧ, используется для поис-
ка места для размещения записи.
З.2.1.8. Фраза ОБЛАСТЬ ДОРОЖКИ
Фраза ОБЛАСТЬ ДОРОЖКИ может использоваться для повыше-
ния эффективности при добавлении записей к индексному файлу ме-
тодом произвольного доступа.
Формат для ДОС ЕС:
ОБЛАСТЬ ДОРОЖКИ целое ЛИТЕР
50
Формат для ОС ЕС:
ОБЛАСТЬ ДОРОЖКИ I ““^анного I ЛИТЕР
——————— ' целое J
Для ДОС ЕС целое рассчитывается по формуле
целое = 24 + N • (40 + KL + В L)'
где N — количество блоков (физических записей) на дорожке;
KL — длина ключа КЛЮЧ ЗАПИСИ;
BL — размер блока.
Если N = 1, целое должно быть равно:
24 + 50+ КЕ + ВЬ
Целое не должно превышать 32767.
Для ОС ЕС эта фраза определяет область основной памяти (вариант
имя-данного) или размер.этой области (вариант целое). Область долж-
на быть достаточной, чтобы вместить все блоки (физические записи)
дорожки, включая поле счетчика и поле ключа и еще одну логическую
запись. Размер этой области должен быть кратен 8 и не должен быть
больше 32760 байт. Если указан вариант целое, область размером це-
лое байт выделяется операционной системой ОС ЕС при открытии фай-
ла, а при закрытии файла эта область освобождается. Если указан
вариант имя-данного, то имя-данного должно быть описано на уровне
01 или 77 в секции рабочей памяти.
При добавлении записей к индексному файлу с помощью этой об-
ласти более эффективно обеспечивается вставка новых записей на до-
рожку между двумя уже имеющимися там записями: в эту область счи-
тываются записи на дорожке, следующие за записью, после которой
должна быть вставлена новая запись. Если эта фраза не указана,
транслятором отводится минимально необходимая область.
З.2.1.9. Фраза ГРАНИЦА ДОРОЖЕК ,
(только для ОС ЕС)
Фраза ГРАНИЦА ДОРОЖЕК указывает относительный номер
последней дорожки, которая должна быть проинициализирована при
создании прямого файла.
Формат:
ГРАНИЦА ДОРОЖЕК целое
Эта фраза не вызывает автоматического назначения дорожек, так
как эти функции выполняются операционной системой по соответст-
вующему параметру в управляющем операторе DD.
Если прямой файл создается последовательно и во время закрытия
файла последний относительный номер дорожки, используемый фай-
лом, меньше целого, указанного во фразе ГРАНИЦА ДОРОЖЕК,
то оставшаяся часть текущей дорожки и все дорожки до целого ини-
циализируются записями описания дорожки (для форматов U, V, S
ваписей данных) или форматизируются фиктивными записями (для
формата F записей данных). Если же относительный номер последней
51
дорожки, используемой файлом, равен или больше целого, заданного
во фразе ГРАНИЦА ДОРОЖЕК, или если эта фраза опущена, то те-
кущая дорожка форматизируется, а оставшиеся назначенные файлу
дорожки не форматизируются. Так как первая дорожка имеет относи-
тельный номер 0, то будет форматизироваться целое плюс одна дорож-
ка.
Для прямого файла с произвольным доступом фраза ГРАНИЦА
ДОРОЖЕК задает последний относительный номер дорожки для ини-
циализации (форматизации) во время открытия файла. Целое опреде-
ляет также размер (в дорожках) файла на магнитных дисках, т. е. ни-
какие другие дополнительные дорожки не могут использоваться фай-
лом. Если для файла указана дорожка вне этой области, то возникает
ситуация недействительного ключа. Если эта фраза опущена, число
инициализируемых (форматизируемых) дорожек определяется пара-
метрами SPACE и VOLUME управляющего оператора DD.
3.2.2. Параграф УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ
В параграфе УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ определяют-
ся некоторые специальные методы управления вводом-выводом.
Общий формат:
УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ.
[фраза ПЕРЕПРОГОН]...
[фраза ОБЩАЯ ОБЛАСТЬ]...
[фраза НА ОДНОЙ КАТУШКЕ]...
[фраза ПРИМЕНИТЬ]...
3.2.2.1; Фраза ПЕРЕПРОГОН
Фраза ПЕРЕПРОГОН указывает, что при выполнении программы
должны создаваться контрольные точки, и определяет момент их созда-
ния. Создание контрольной точки—это запись в определенные мо-
менты состояния рабочей программы и содержимого основной памяти
на запоминающее устройство. Эта информация может быть прочитана
в основную память для повторного запуска программы (перепрогона)
с этой точки, например, если выполнение программы закончилось не-
нормально в результате сбоя оборудования.
Формат 1:
ПЕРЕПРОГОН НА имя-реалцзации
КАЖДЫЕ целое-1 ЗАПИСЕЙ имя-файла
Формат 2:
ПЕРЕПРОГОН НА имя-реалиэации
Имя-реализации определяет тип запоминающего устройства для
файла контрольных точек, т. е. файла, в который будут помещаться
записи контрольных точек. Оно имеет такую же структуру, как и си-
стемное имя во фразе НАЗНАЧИТЬ:
52
а) для ДОС ЕС: SYSnnn-класс-шифр-организация [-имя];
б) для ОС ЕС: класс [-шифр]-организация-имя.
Поле SYSnnn (только для ДОС ЕС) и поле имени в системном имени
для файла контрольных точек не должны совпадать с соответствую-
щими полями в системных именах, указанных во фразе НАЗНАЧИТЬ.
Для файлов контрольных точек может быть назначен НМД или
НМЛ, причем НМД для файлов контрольных точек может быть назна-
чен в программе только один.
Записи контрольных точек помещаются в файл контрольных то-
чек последовательным методом доступа.
Имя-файла в формате 1 определяет имя того файла, при обработке
которого должны создаваться контрольные точки.
Фраза ПЕРЕПРОГОН формата 1 указывает, что контрольные точ-
ки в программе должны создаваться всякий раз, когда обработано ко-
личество записей имени-файла, определенное целым. Значение целого
не должно превышать 16777215.
В программу может быть включено более одной фразы 11ЕРЕПРО-
ГОН формата 1. Причем если указано несколько таких фраз, то в них
именем реализации может быть определен один и тот же файл или раз-
ные файлы контрольных точек.
Формат 2 используется для создания контрольных точек при сор- ,,
тировке файлов (подробнее см. в главе 8). ' I
3.2.2.2. Фраза ОБЩАЯ ОБЛАСТЬ *
Фраза ОБЩАЯ ОБЛАСТЬ указывает, что для обработки двух или
более файлов используется одна и та же область основной памяти. .
Формат:
ОБЩАЯ ОБЛАСТЬ J £№ГЙ(%)ВКИ ] имя’Файла‘1 [имя-файла-2].„
Вариант ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ описан в главе 8.
Каждому файлу, обрабатываемому в программе, отводится своя
' область ввода-вывода (буфер), в которой обрабатываются записи фай-
ла.
Если в программе используется фраза ОБЩАЯ ОБЛАСТЬ ЗАПИ-
СИ, это означает, что, кроме буферов ввода-вывода, которые отводятся
для каждого файла, в основной памяти будет выделена область, общая
для всех файлов, перечисленных в этой фразе, в которой будет обра-
батываться текущая логическая запись. Следовательно, все файлы,
перечисленные в этой фразе, могут быть открыты одновременно, но в
каждый конкретный момент времени в области записи может присут-
ствовать логическая запись только одного из этих файлов (последнего
читавшегося или последнего записываемого). Если используется эта
фраза и для файла, указанного в лей, выполняется оператор ПИСАТЬ,
логическая запись файла остается доступной в области записи и после
выполнения оператора ПИСАТЬ.
Если вариант ЗАПИСИ не указан, это означает, что общими яв-
ляются все области, назначенные файлам (количество этих областей
53
определяется фразой РЕЗЕРВИРОВАТЬ). Поэтому в каждый кон-
кретный момент времени может быть открыт только один из этих фай-
лов. Следовательно, эта фраза может быть использована только для
файлов, которые не участвуют в обработке одновременно.
В программе может быть указано более одной фразы ОБЩАЯ
ОБЛАСТЬ и (или) ОБЩАЯ ОБЛАСТЬ ЗАПИСИ, но при этом должны
быть соблюдены следующие правила:
а) одно и то же имя файла не должно указываться более чем в одной
фразе ОБЩАЯ ОБЛАСТЬ или ОБЩАЯ ОБЛАСТЬ ЗАПИСИ;
б) если одно или более имен файлов из указанных во фразе ОБ-
ЩАЯ ОБЛАСТЬ требуется указать во фразе ОБЩАЯ ОБЛАСТЬ ЗА-
ПИСИ, все имена файлов, перечисленные во фразе ОБЩАЯ ОБЛАСТЬ,
должны появиться во фразе ОБЩАЯ ОБЛАСТЬ ЗАПИСИ. Однако
во фразе ОБЩАЯ ОБЛАСТЬ ЗАПИСИ могут быть перечислены и име-
на файлов, отличные от тех, которые указаны во фразе ОБЩАЯ ОБ-
ЛАСТЬ.
3.2.2.3. Фраза НА ОДНОЙ КАТУШКЕ
Фраза НА ОДНОЙ КАТУШКЕ используется для указания того,
что несколько файлов находятся на одной катушке магнитной ленты,
и определения, если это необходимо, относительной позиции файла
на этой катушке.
Формат:
НА ОДНОЙ КАТУШКЕ имя-файла-1 [ПОЗИЦИЯ целое-Ц
[имя-файла-2 [ПОЗИЦИЯ целое-2Ц...
Из всех файлов, находящихся на одной и той же катушке магнит-
ной ленты, в любой момент времени может быть открытым только один
файл.
Для ОС ЕС эта фраза рассматривается как комментарий, так как
функции этой фразы выполняются операционной системой на основа-
нии параметра LABEL в управляющем операторе DD.
Для ДОС ЕС фраза НА ОДНОЙ КАТУШКЕ существенна лишь
тогда, когда на магнитной ленте имеются файлы с нестандартными мет-
ками или когда метки опущены.
Фраза может не указываться в следующих случаях:
а) файлы имеют стандартные метки;
б) файлы обрабатываются в той последовательности, в которой они
находятся на катушке, и ни для одного из этих файлов, кроме послед-
него, перемотка не производится.
Нужно указывать во фразе только те файлы, которые используют-
ся в данной программе, независимо от общего количества файлов на
катушке.
Вариант ПОЗИЦИЯ предназначен для указания положения (по-
зиции) файла на магнитной ленте. Положение файла определяется ко-
личеством предшествующих ему физических файлов. Считается, что
физический файл — это сегмент магнитной ленты, который заканчи-
вается ленточной маркой. Если все имена-файлов относятся к одиноч-
ным физическим файлам и перечислены в последовательном порядке,
54
нет необходимости задавать вариант ПОЗИЦИЯ. Положение файла
относительно начала магнитной ленты должно быть указано, если на
магнитной ленте имеются файлы, имена которых не перечислены во
фразе: например, файлы, которые вообще не обрабатываются данной
программой, или файл содержит более одного физического файла, т. е.
более одной ленточной марки.
Начальная метка файла I ТМ Файл 1 ТМ Начальная метка файла 2 ТМ Файл 2 ТМ
Рис. 2 Позиции файлов с нестандартными начальными мет-
ками, заканчивающиеся ленточными марками (ТМ)
Пусть, например, магнитная лента содержит два файла, каждый из
которых имеет одну нестандартную начальную метку заканчивающую-
ся ленточной маркой (рис 2) Если программисту требуется обрабо-
тать начальные метки файлов, он должен указать позиции файлов как
1 и 3. Если метки обрабатывать не нужно еледует указать позиции
файлов как 2 и 4, а во фразе МЕТКИ статьи описания файла указать
вариант ОПУЩЕНЫ Магнитная лента установится следующим об-
разом: пропускается количество ленточных марок, равное позиции
файла, уменьшенной на единицу.
В программе может быть определено более одной фразы НА ОД-
НОЙ КАТУШКЕ.
3.2.2.4. Фраза ПРИМЕРИТЬ
Фраза ПРИМЕНИТЬ позволяет получить более эффективную про-
грамму или обеспечить некоторые дополнительные возможности обра-
ботки. Имеются 8 вариантов фразы ПРИМЕНИТЬ.
Вариант 1 применяется для оптимизации использования об-
ласти вывода и места на носителе при создании последовательного
файла с блокированными записями переменной длины.
Формат варианта 1:
ПРИМЕНИТЬ ОСОБОЕ-ПИСАТЬ К имя-файла-1 [имя-файла-21...
Обычно область вывода выгружается, когда в нее не вмещается мак-
симальная по описанию запись. При использовании фразы ПРИМЕ-
НИТЬ ОСОБОЕ-ПИСАТЬ область вывода будет выгружаться только
тогда, когда в нее фактически не будет вмещаться очередная запись.
Файл может быть открыт только как выходной.
Записи файлов, указанных во фразе, должны формироваться в ра-
бочей области и записываться оператором ПИСАТЬ е фразой ИЗ ПО-
ЛЯ. Процедурные операторы не должны обращаться ни к каким дан-
ным этих записей, и ни одно из этих данных не может быть указано в
варианте В ЗАВИСИМОСТИ ОТ фразы ПОВТОРЯЕТСЯ.
Вариант 2 (только для ДОС ЕС) используется для управления
областью поиска записи на магнитном диске при произвольном досту-
пе к прямому файлу.
55
Формат варианта 2:
ПРИМЕНИТЬ РАСШИРЕННЫЙ-ПОИСК К имя-файла-1 [имя-файла-2]...
Этот вариант применим только для входных и входных-выходных
файлов на магнитных дисках. Если эта фраза не указана, при вы-
полнении оператора ЧИТАТЬ поиск требуемой записи производится
только на указанной дорожке. Если запись на дорожке не найдена,
выполняется повелительный оператор, указанный во фразе ПРИ
ОШИБКЕ КЛЮЧА оператора ЧИТАТЬ или ОБНОВИТЬ.
Когда используется фраза ПРИМЕНИТЬ РАСШИРЕННЫЙ-
ПОИСК и запись на указанной дорожке не найдена, при поиске
записи просматривается весь цилиндр. Ситуация недействительного
ключа при выполнении оператора ЧИТАТЬ или ОБНОВИТЬ будет
возникать только тогда, когда требуемая запись не найдена на ци-
линдре.
В операционной системе ОС ЕС соответствующая возможность
обеспечивается заданием параметра OPTCD = E в управляющем
операторе DD, связанном с файлом.
Вариант 3 (только для ДОС ЕС) используется для указания
того, что должен производиться контроль записи информации на
магнитные диски.
Формат варианта 3:
ПРИМЕНИТЬ ПИСАТЬ-С-КОНТРОЛЕМ К имя-файла-1 [имя-файла-2]...
Если фраза не указана, занесение информации на магнитный
диск производится без контроля. *
В операционной системе ОС ЕС соответствующая возможность
обеспечивается заданием параметра OPTCD = W в управляющем
операторе DD, связанном с файлом.
Вариант 4 (только для ДОС ЕС) используется для указания
количества дорожек, которое нужно зарезервировать на каждом
цилиндре для области переполнения при создании индексного фай-
ла или добавлении к нему записей.
Формат варианта 4:
ПРИМЕНИТЬ ПЕРЕПОЛНЕНИЕ-ЦИЛ целое ДОРОЖЕК К имя-файла-1
[имя-файла-2]...
Если эта фраза используется, для области переполнения резерви-
руется число дорожек, определенное целым.
Если целое равно нулю, область переполнения не резервируется^
Если эта фраза не указана, для области переполнения резервируется
20% каждого цилиндра. Максимальное значение целого для ЕС-5052
равно 8, для ЕС-5061 равно 18.
В операционной системе ОС ЕС соответствующая возможность
обеспечивается заданием параметров OPTCD==Y и CYLOFL = xx,
где хх — количество дорожек в управляющем операторе DD, связан-
ном с файлом.
Вариант 5 (только для ДОС ЕС) используется для указания
индекса самого высокого уровня и устройства, на котором он должен
размещаться.
56
Формат варианта 5:
( ГЛАВНЫЙ-ИНДЕКС 1
ПРИМЕНИТЬ J индекс-пип------- j НА шифр-устройства
К имя-файла-1 [имя-файла-2]...
Этот вариант используется только для индексных файлов.
Шифр-устройства должен быть 5052 или 5061.
Если для индексного файла эта фраза опущена, считается, что ин-
декс цилиндров является индексом самого высокого уровня и находит-
ся на том же устройстве, что и основные данные. Если указан вариант
ГЛАВНЫЙ-ИНДЕКС, тогда и главный индекс и индекс цилиндров
будут находиться на указанном устройстве.
В операционной системе ОС ЕС соответствующая возможность
обеспечивается заданием параметров OPTCD = М и NTM = хх, где
хх — количество дорожек в управляющем операторе DD, связанном
с файлом.
Вариант 6 (для ДОС ЕС) используется для указания области
основной памяти, которая будет использоваться для хранения индек-
са цилиндров.
Формат варианта 6:
ПРИМЕНИТЬ ПАМЯТЬ-ИНДЕКСУ В имя-данного К имя-файла-1
I имя-файла-2]...
Этот вариант может быть.указан только для индексного файла о
произвольным доступом.
Область, определяемая именем-данного, должна быть не менее
(3 4- N)(6 4- KL), где N — количество записей индекса цилиндров,
которые нужно одновременно прочитать в основную память; KL —
длина ключа записи данных.
Имя-данного должно быть именем данного фиксированной длины,
определенного в секции рабочей памяти. Оно должно находиться на
фиксированном месте от начала записи, т. е. не может следовать за
статьей, содержащей фразу ПОВТОРЯЕТСЯ с вариантом В ЗАВИСИ-
МОСТИ ОТ, или подчиняться такой фразе.
Если для одного и того же имени-данного указано несколько фай-
лов, только один из этих файлов может быть открыт в любой момент
времени. Имя-файла нельзя указывать более чем в одной фразе ПРИ-
МЕНИТЬ ПАМЯТЬ-ИНДЕКСУ. При использовании фразы ПЕРЕОП-
РЕДЕЛЯЕТ нужно проследить, чтобы два имени-данных, которые от-
носятся к одной и той же области основной памяти, не были связаны
с двумя файлами, которые открываются одновременно.
Содержимое имени-данного нельзя изменять операторами раздела
процедур, когда открыт какой-нибудь из файлов, связанных с ним.
В основной памяти может располагаться весь индекс цилиндров
или его часть. Если область основной памяти, предназначенная индек-
су цилиндров, достаточно велика, чтобы вмещать все записи индекса,
57
которые нужно одновременно прочитать в основную память, нет необ-
ходимости делать предварительную сортировку ключей записей. Од-
нако, если область, предназначенная индексу цилиндров^.недостаточ-
но велика, ключи записей, подлежащих обработке, следует предвари-
тельно рассортировать так, чтобы резидентный индекс цилиндров ис-
пользовался эффективно.'
Вариант 6 (для ОС ЕС) используется для указания того, что
индекс са.мого высокого уровня будет обрабатываться в основной памя-
ти. Область для обработки выделяется во время открытия файла и ос-
вобождается во время закрытия файла.
Формат варианта 6:
ПРИМЕНИТЬ ПАМЯТЬ-ИНДЕКСУ К имя-файла-1 [имя-файла-2]„.
Этот вариант может быть указан только для индексного файла с про-
извольным доступом.
Вариант 7 (только для ОС ЕС) позволяет уменьшить неисполь-
зованную область на запоминающих устройствах с произвольным об-
ращением, допускающих переходящие записи.
Формат варианта 7:
ПРИМЕНИТЬ ПЕРЕХОДЯЩУЮ-ЗАПИСЬ К имя-файла-1 [имя-файла-2]...
Фраза может использоваться только для последовательных фай-
лов с записями формата F, U или V и прямых файлов с записями фор-
мата F. Если эта фраза указана и блок (физическая запись) не вмеща-
ется на дорожке, то на этой дорожке будет записана часть блока, а
оставшаяся часть — на следующей доступной дорожке.
Вариант 8 (только для ОС ЕС) позволяет в программе на Кобо-
ле получить от системы статистическую информацию для реорганиза-
ции индексного файла.
Формат варианта 8:
ПРИМЕНИТЬ КРИТЕРИЙ-РЕОРГ В имя-данного ДЛЯ имя-файла.
При создании индексного файла в управляющем операторе DD дол-
жен быть указан критерий реорганизации.
Фраза ПРИМЕНИТЬ КРИТЕРИЙ-РЕОРГ может быть указана
при произвольном доступе к индексному файлу. Если фраза указана,
при закрытии файла в имя-данного будет помещена статистическая
информация о файле. Имя-данного должно относиться к данному, со-
стоящему из трех элементарных двоичных данных, длиной в 2, 2 и 4
байта соответственно. Первые два байта будут содержать число запол-
ненных областей переполнения цилиндров. Вторые два байта будут
содержать число дорожек (частичных или полных), оставшихся ,в не-
зависимой области переполнения. Последние четыре байта будут со-
держать количество операторов ЧИТАТЬ и ПИСАТЬ, которые обраща-
лись к записям в области переполнения, не являющимся первыми в це-
почке таких записей.
68
4. РАЗДЕЛ ДАННЫХ
4.1. ОБЩИЕ СВЕДЕНИЯ
Раздел данных — третий раздел исходной программы — служит
для описания всей информации, которая должна обрабатываться рабо-
чей программой. В общем случае раздел данных может содержать четы-
ре секции: секцию файлов, секцию рабочей памяти, секцию связи и
секцию отчетов. Наличие любой из этих секций в программе необяза-
тельно, но те, которые присутствуют, должны следовать в перечислен-
ном порядке. Если какая-либо секция в программе отсутствует, за-
головок секции также опускается. В секции файлов описываются фай-
лы или данные, запоминаемые на носителях данных. В секции рабочей
памяти описываются требуемые константы, различные промежуточные
поля. В секции связи описывается информация, передаваемая данной
программе из какой-то другой программы. В секции отчетов описы-
ваются содержимое и формат различных печатных документов (отче-
тов), формируемых и выдаваемых в программе.
Описание всей информации в разделе данных представляет собой
набор статей, состоящих из фраз описания.
Внешние характеристики файла, т. е. способ записи файла на носи-
теле данных, связанные с физическими аспектами файла, указываются
программистом в статье описания файла. К таким характеристикам от-
носятся, например, количество логических записей в физической за-
писи и идентификация файла.
Внутренние характеристики логической записи, например тип дан-
ных, содержащихся в каждом поле записи, описываются программис-
том иерархией статей описания данных, образующих статью описания
ваписи. Статьи описания записей следуют за статьей описания файла,
которому принадлежат эти записи.
Описание промежуточной информации дается в секции рабочей
памяти раздела данных с помощью статей описания несвязанных дан-
ных и статей описания записей. Несвязанные данные — это данные, ко-
торые не имеют никакой иерархической структуры.
Каждая статья раздела данных начинается с индикатора уровня или
номера уровня, за которым следуют имя данного и последовательность
независимых фраз, описывающих это данное. Последняя фраза закан-
чивается точкой, за которой следует пробел.
4.2. СТАТЬЯ ОПИСАНИЯ ФАЙЛА
Статья описания файла состоит из индикатора уровня ОФ,- имени
файла и последовательности независимых фраз. Статья заканчивает-
ся точкой, за которой следует пробел.
Общий формат статьи:
ОФ имя-файла
[фраза В БЛОКЕ]
[фраза В ЗАПИСИ]
59
[фраза МЕТОД ЗАПИСИ]
фраза МЕТКИ
[фраза ЗНАЧЕНИЕ]
[фраза ЗАПИСИ ДАННЫХ]
[фраза ОТЧЕТ].
ОФ — индикатор уровня, который идентифицирует начало статьи
описания файла и должен предшествовать имени-файла. Фразы, кото-
рые следуют за именем-файла, за исключением фразы МЕТКИ, необя-
зательны. Порядок их следования не существен.
Фраза ОТЧЕТ относится к средствам генератора отчетов и будет
описана в соответствующей главе.
4.2.1. Фраза В БЛОКЕ
Фраза В БЛОКЕ используется для определения размера физичес-
кой записи (блока) файла. Эта фраза определяет также размер каждой
области ввода-вывода (буфера), выделяемой файлу в основной памяти.
Формат: • .
В БЛОКЕ [ОТ целое-1 ДО] иелое-2 /ЗАПИСЕЙ \
------- ---- (ЛИТЕР f
Целое-1 и целое-2—положительные числа, соответствующие ми-
нимальному и максимальному размерам блока. Если используется,
только целое-2, оно представляет точный размер блока.
Если указано только.целое-2 и оно равно нулю (только для ОС ЕС),
размер блока определяется в рабочее время из управляющего операто-
ра DD или метки набора данных для файла. Если целре-2 равно нулю,
имя этого файла не может использоваться.во фразе ОБЩАЯ ОБЛАСТЬ.
Файл должен быть стандартным последовательным файлом или индекс-
ным файлом с последовательным доступом.
Вариант ЛИТЕР используется для указания числа позиций литер,
требуемых для запоминания физической записи. Позиция литеры в ЕС
ЭВМ эквивалентна байту. Этот вариант применяется в следующих слу-
чаях:
а) физическая запись содержит дополнительные байты, которые
не содержатся в логической записи;
б) логические записи группируются таким образом, что фактичес-
кий размер блока не совпадет с размером, подсчитанным транслято-
ром. Например, пользователь описывает файл с записями переменной
длины. Но каждый раз, когда он пишет блок из четырех записей, он
пишет запись из 50 байт, за которой следуют три записи по 100 байт.
Тогда пользователь может указать фразу В БЛОКЕ 370 ЛИТЕР, так
как размер блока в этом случае равен 50 + 3 X 100 + 20 = 370 (20—ко-
личество управляющих байт). Если бы был указан вариант ЗАПИСЕЙ,
то транслятор рассчитал бы размер блока, равный 420;
в) логические записи превышают физические, т. е. записи файла
представлены в формате S.
60
При использовании варианта ЛИТЕР целое-1 и целое-2 должны
указывать физический размер блока, т. е. количество байт, требуемых
для размещения блока в основной памяти или на носителе данных. Фи-
зический размер блока может отличаться от размера в так называемом
«стандартном формате данных», который определяется в Коболе фразой
ШАБЛОН (см. п.4.3.3.2) и не зависит от конкретной реализации. На-
пример, данное, имеющее следующее описание
ШАБЛОН 9(4) ДЛЯ ВЫЧИСЛЕНИЙ
<
в стандартном формате данных всегда имеет размер 4, а его физический
размер для ЕС ЭВМ равен 2 байтам (см. фразу об использовании в
п.4.3.5). Целое-1 и целое-2 должны также включать дополняющие
и управляющие байты, содержащиеся в физической записи.
Вариант ЗАПИСЕЙ используется для указания размера блока в
ваписях. Этот вариант может применяться во всех случаях, кроме
тех, когда нужно применять вариант ЛИТЕР. Для варианта ЗАПИ-
СЕЙ транслятор рассчитывает размер блока исходя из целого-2 запи-
сей максимальной длины в учетом требуемых управляющих байт.
Таблица б
Организация файла Тип устройства Допуотимве варианты фраз
В БЛОКЕ МЕТОД ЗАПИСИ МЕТКИ
Последова- тельная t То же » > • > > Последова- тельная Прямая Индексно- последова- тельная Относитель- ная Перфо карточ- ное устройство ввода Перфо карточ- ное устройство вывода, печа- тающее уст- ройство НМЛ То же НМД » » » » » [ц-1 ДО] ц-2. (ЛИТЕР 1 (ЗАПИСЕЙ/ ц-2 ЛИТЕР [ц-1 ДО] ц-2 /ЛИТЕР 1 (ЗАПИСЕЙ/ ц-2 ЛИТЕР ц-2 ЗАПИСЕЙ F (F) (U) IvJ 15} S и /F1 IV/ S и F] U V Is F F ОПУЩЕНЫ ОПУЩЕНЫ (СТАНДАРТНЫ] (ОПУЩЕНЫ ) (имя-данного J То же (СТАНДАРТНЫ! (имя-данного | То же (СТАНДАРТНЫ! (имя-данного J То же СТАНДАРТНЫ (СТАНДАРТНЫ] (имя-данного /
61
Фраза В БЛОКЕ не применима для файлов на устройствах одиноч-
ных записей, для последовательных файлов с записями формата U,
для прямых и (только для ОС ЕС) относительных файлов, так как для
таких файлов блокирование записей не допускается. Для таких фай-
лов эта фраза воспринимается транслятором как комментарий.
Фраза В БЛОКЕ не требуется, когда записи файла не группируют-
ся в блоки, т. е. когда физическая запись содержит только одну пол-
ную логическую запись.
Если явно не указан вариант ЛИТЕР или ЗАПИСЕЙ, подразуме-
вается ЛИТЕР.
Для индексного файла не может быть указан вариант ЛИТЕР и ва-
риант целое-1.
Выбор правильного варианта фразы В БЛОКЕ может быть сделан
с помощью табл. 6.
4.2.2. Фраза В ЗАПИСИ
Фраза В ЗАПИСИ используется для указания физического разме-
ра логических записей данных в файле.
Формат:
В ЗАПИСИ [ОТ целое-1 ДО] целое-2 ЛИТЕР
Целое-1 и целое-2—целые положительные числа, указывающие
количество позиций литер соответственно в наименьшей и наибольшей
логических записях. Если записи в файле имеют одинаковый размер,
указывается только целое-2, что соответствует точному количеству
символов в записи данных. Если записи имеют неодинаковый размер,
указываются и целое-1, и целое-2.
Целое-1 и целое-2 должны указывать физический размер записи,
т. е. количество байт, требуемых для физического размещения записи
в основной памяти или на носителе данных.
Физический размер каждой записи определяется как сумма разме-
ров входящих в нее элементарных данных, включая дополняющие бай-
ты, если использовалась фраза ВЫДЕЛЕНО. Физический размер
каждого данного, т. е. количество байт основной памяти, необходимое
для размещения данного, определяется на основании фразы ШАБЛОН
и фразы об использовании в статье описания данного (см. п.п. 4.3.3 и
4.3.5), а правила подсчета количества дополняющих байт определены
в п. 4.3.6.
Фраза В ЗАПИСИ не является обязательной. Если она не указана,
транслятор устанавливает размер записей из статей описания записей.
Причем, если одно или более данных в записи имеют переменный раз-
мер, т. е. их описание содержит фразу ПОВТОРЯЕТСЯ В ЗАВИСИ-
МОСТИ ОТ, то транслятор вычислит размер записи исходя из макси-
мального значения данного, задающего число повторений.
Однако бывают случаи, когда данные, задающие число повторений
данных в записи, не достигают одновременно максимальных значений.
В этом случае пользователь может сэкономить память, указав во фразе
В ЗАПИСИ целое-2, отличное от размера, вычисленного транслятором
62
на основании максимальных значений данных во фразах ПОВТОРЯЕТ-
СЯ.
Пусть, например, создается неблокированный файл записей посе-
щаемости в школе, где общее число учащихся равно 500, и каждая
запись файла описана следующим образом:
01 сводка-посещаемости.
02 день ШАБЛОН Х(6).
02 отсутствующие ШАБЛОН 3999 ДЛЯ ВЫЧИСЛЕНИЙ.
02 присутствующие ШАБЛОН 3999 ДЛЯ ВЫЧИСЛЕНИЙ.
02 фио-отс ПОВТОРЯЕТСЯ 0 ДО 500 РАЗ
В ЗАВИСИМОСТИ ОТ отсутствующие ШАБЛОН А(20).
02фио-прис ПОВТОРЯЕТСЯ 0 ДО 500 РАЗ
В ЗАВИСИМОСТИ ОТ присутствующие ШАБЛОН А(20).
Воспользовавшись тем, что сумма отсутствующих и присутствую-
щих никогда не превысит общего числа учащихся в школе, програм-
мист может указать в статье описания файла размер записи 10010 ли-
тер, что почти в два раза меньше того размера, который рассчитает
транслятор исходя из описания записи.
4.2.3. Фраза МЕТОД ЗАПИСИ
Фраза МЕТОД ЗАПИСИ используется для указания формата ло-
гических записей файла.
Формат:
МЕТОД ЗАПИСИ имя-реализации
Имя-реализации может быть одной из литер F, V, U или S, что соот-
ветствует фиксированному, переменному, неопределенному и сегмен-
тированному форматам записей.
Выбор формата записей зависит от типа входной и выходной инфор-
мации, типа устройства ввода-вывода, на которое будет записан файл,
и метода доступа, используемого для считывания или записи файла.
Метод F (фиксированный формат). Все записи файла в этом методе
имеют одинаковую длину, и каждая запись целиком содержится в од-
ном блоке. Записи в файле считаются одинаковой длины, если есть
только одно описание записи, связанное с файлом, и оно не содержит
фразу ПОВТОРЯЕТСЯ В ЗАВИСИМОСТИ ОТ нли если есть несколь-
ко описаний записей, и все они определяют записи одной длины. Блоки
могут содержать более одной записи. Причем число логических запи-
сей в блоке (коэффициент блокирования) обычно является постоянным
для всех блоков в файле. В этом методе блоки не имеют управляющих
полей (полей длины записи и описателя блока). Записи формата F по-
казаны на рис. 3.
Если для файла указан метод F и при его обработке возникает необ-
ходимость использовать управляющий символ для выбора кармана
или управления печатью, первый символ каждой логической записи
должен быть зарезервирован для управляющего символа.
63
а) Логическая запись-1 Логическая запись-2 Логическая запись-3
4- ' — Фиксированная длина
б) Логическая запись
Фиксированная длина — ►
Рис. 3. Записи фиксированного формата:
а) блокированные записи; б) неблокированная запись
Метод V (переменный формат). Записи могут быть фиксированной
или переменной длины и каждая должна полностью содержаться в
одном блоке. Блоки могут содержать более одной записи. Метод V
может указываться для файлов с прямой и последовательной ораниза-
цией. Записям формата V всегда предшествуют управляющие поля
(рис. 4).
Рис. 4. Записи переменного формата)
а) блокированные записи; б) неблокированная запись
Первые четыре байта (ее) каждой логической записи формата V со-
держат следующую управляющую информацию:
U — два байта, указывающие длину логической записи, включая
поле сс;
bb — два байта, зарезервированные для использования системой.
Первые четыре байта (СС) каждого блока содержат следующую уп-
равляющую информацию:
LL — два байта, указывающие длину блока, включая поле СС;
ВВ — два байта, зарезервированные для использования системой.
Для блокированных записей формата V физическую запись обра-
зуют данные каждой записи, управляющая информация каждой записи
(сс) и управляющая информация блока (СС).
Для неблокированных записей формата V физическую запись об-
разуют данные, управляющая информация записи (сс) и управляющая
информация блока (СС).
Управляющие поля обеспечиваются автоматически при записи фай-
ла и недоступны программисту при чтении файла. Эти байты не тре-
буется определять в описании логической записи. Транслятор сам от-
водит под области ввода и вывода память, достаточную для того, что-
бы вместить их. Если в операторе ЧИТАТЬ используется фраза «В иден-
64
тификатор», записи формата V в область идентификатора пересылают-
ся без управляющих байт. Эти байты не печатаются и не перфорируют-
ся на устройствах одиночных записей, однако они присутствуют на
других устройствах внешней памяти и в области ввода-вывода.
Метод U (неопределенный формат). Записи могут быть фиксирован-
ной или переменной длины. В блоке только одна запись. Этот метод
похож на метод V. Отличия состоят в том, что записи в методе U не
блокированы и не имеют никаких предшествующих управляющих по-
лей. Метод U может быть указан для прямых или последовательных
файлов с любой комбинацией описаний записей при условии, что в блоке
.содержится только одна запись. Записи формата U показаны на рис.5.
Запись формата U
Логическая запись
Рис. 5. Записи неопределенного формата
Если при обработке файла в записями неопределенного формата
возникла необходимость использовать управляющий символ выбора
кармана или управления печатью, первый байт каждой записи должен
быть зарезервирован для размещения этого символа.
Метод S (сегментированный формат). Записи в этом методе могут
быть фиксированной или переменной длины и каждая может содер-
жаться в одном или более блоках. Размер логической записи не зави-
сит от размера блока и может быть меньше, равен или больше размера
блока. Если запись больше, чем оставшееся место в блоке, то в блок
помещается сегмент записи, остаток записи помещается в следующем
блоке (или блоках). Каждый сегмёнт записи в блоке, даже если он
является полной записью, включает поле описателя сегмента, в кото-
ром указываются длина сегмента и признак того, какой это сегмент:
первый, последний или промежуточный: Каждый блок включает уп-
равляющее поле описателя блока. Управляющие поля (поле описателя
блока и поле описателя сегмента) не нужно описывать в разделе дан-
ных, место для них обеспечивается автоматически. Эти поля недоступ-
ны программисту.
Поле описателя блока (BDF) имеет следующую структуру (рис. 6):
—4 байта—>• I <—4 байта—>1
LL ВВ и ЬЬ Полная запись или сегмент записи
ч- BDF SDF ->
Рис. 6. Управляющие поля
для сегментированного фермата записей
LL — два байта, содержащие длину физического блока, включая
поле описателя блока;
3 Зак. 73
65
В В — два байта, зарезервированные для использования системой.
Поле описателя сегмента (SDF) имеет следующую структуру:
ц — дВа байта, содержащие длину сегмента, включая поле описа-
теля сегмента;
bb — два байта, зарезервированные для использования системой.
При обработке файлов с сегментированными записями по оператору
ЧИТАТЬ и (или) ПИСАТЬ программисту доступны только полные ло-
гические записи.
Пример.
Пусть в разделе данных имеется файл со следующей статьей описа-
ния:
ОФ сегмент-файл
МЕТКИ СТАНДАРТНЫ
В БЛОКЕ 350 ЛИТЕР
В ЗАПИСИ ОТ 50 ДО 150 ЛИТЕР
МЕТОД S
и пусть первые пять записей этого файла имеют длину соответственно
150, 150, 150, 100, 150. Расположение этих записей в блоках без учета
места для управляющих полей показано на рис. 7.
1 й блок 2-й блок
150 150 50 100 100 150
1-я запись 2-я запись • 3-я запись 4-я запись 5-я запись
Рис. 7. Расположение записей в блоках в методе S
Метод S имеет ряд преимуществ перед другими методами, так как
не ограничивает программиста длиной записи и дает возможность бо-
лее эффективно использовать устройства внешней памяти, поскольку
минимизируется число промежутков между блоками. Метод S может
быть указан для файлов с последовательной или прямой организацией.
Фраза МЕТОД ЗАПИСИ не является обязательной. Если она опу-
щена, транслятор определяет метод записи на основании описания за-
писей, входящих в файл. Так, для последовательных файлов трансля-
тор устанавливает следующие методы:
F, если в^е записи определены как имеющие одинаковый размер
и этот размер меньше или равен размеру блока;
V, если записи определены как переменные по размеру или фраза
В ЗАПИСИ указывает диапазон значений и самая длинная запись
меньше или равна максимальному размеру блока;
S, если максимальный размер блока меньше самой длинной записи.
Для прямых файлов транслятор устанавливает следующие методы:
F, если записи определены как имеющие одинаковый размер и этот
размер меньше или равен размеру блока;
V, если записи определены как переменные по длине или фраза
В ЗАПИСИ указывает диапазон значений и самая длинная запись
меньше или равна максимальному размеру блока;
66
S, если максимальный размер блока меньше наибольшего размера
ваписи.
Файлы, которым назначается перфокарточное устройство ввода,
должны иметь метод F.
Файлы с индексной и (только для ОС ЕС) относительной организа-
цией должны иметь метод F.
Выбор правильного варианта фразы МЕТОД может быть сделан
в помощью табл. 6 в п. 4.2.1.
4.2.4. Фраза МЕТКИ
Фраза МЕТКИ указывает, имеет ли файл метки и, если они имеют-
ся, идентифицирует их.
Формат для ДОС ЕС:
, СТАНДАРТНЫ
МЕТКИ J ОПУЩЕНЫ I
I имя-данного-1 [имя-данного-2]... ’
Формат для ОС ЕС:
МЕТКИ
/СТАНДАРТНЫ
ОПУЩЕНЫ
имя-данного-1 [имя-данного-2]... [ОБЛАСТЬ СЧЕТА
имя-данного-3 ОБЛАСТЬ СОХРАНЕНИЯ имя-данного-4]
Фраза МЕТКИ обязательна в каждой статье описания файла.
Вариант ОПУЩЕНЫ указываем что никаких явных меток для
файла нет или существующие метки нестандартны, и программист не
применяет декларативную процедуру для их обработки. Использова-
ние варианта ОПУЩЕНЫ не приводит к автоматическому пропуску
нестандартных меток при вводе. Программист сам должен обрабаты-
вать или пропускать нестандартные метки при вводе и создавать их
при выводе как записи данных. Вариант ОПУЩЕНЫ должен быть
указан для файлов на устройствах одиночных записей (перфокарточ-
ных устройствах ввода или вывода и печатающем устройстве) и может
быть указан для файлов на магнитной ленте.
Вариант СТАНДАРТНЫ указывает, что файл имеет стандартные
системные метки. Эти метки будут обрабатываться операционной си-
стемой, а появляющиеся в файле стандартные метки пользователя
будут пропускаться. Вариант СТАНДАРТНЫ должен быть указан
для файлов в индексной организацией и может быть указан для всех
других файлов, кроме файлов на устройствах одиночных записей.
Вариант имя-данного-1 указывает на то, что файл имеет стандарт-
ные метки пользователя дополнительно к системным стандартным мет-
кам или нестандартные метки, которые нужно обрабатывать. Имя-
данного-1, имя-данного-2 и т. д. — это имена записей меток пользова-
теля. Эти имена должны появиться как имена записей в статьях опи-
сания записей, но не должны появляться во фразе ЗАПИСИ ДАННЫХ.
Вариант имя-данного-1 может быть указан для файлов с последо-
вательной организацией (кроме файлов на устройствах одиночных за-
3*
67
писей), а также для файлов с прямой и (только для ОС ЕС) относитель-
ной организацией.
Нестандартные метки пользователя могут обрабатываться только
для последовательных файлов на магнитной ленте. Тома магнитных
лент, на которых расположены файлы в нестандартными метками, не
содержат стандартных меток. Первой записью на каждом таком томе
является первая нестандартная метка.
Стандартные метки пользователя располагаются за стандартными
системными метками файла: начальные метки пользователя за систем-
ной начальной меткой файла, но перед первой записью данных; ко-
нечные метки пользователя — за системной конечной меткой файла.
Они имеют фиксированную длину (80 байт) и частично фиксированный
формат. Первые четыре байта служат для идентификации метки и пред-
ставляют собой обязательную часть информации метки. Первые три
байта начальной стандартной метки пользователя должны содержать
значение UHL, а конечной стандартной метки пользователя — значе-
ние UTL. В четвертой позиции метка содержит номер метки в группе
стандартных меток пользователя (1, 2, ...). Остальные 76 байт исполь-
зуются по усмотрению программиста.
Все обращения в разделе процедур к имени-данного-1, имени-дан-
ного-2 и т. д. или к любому данному, подчиненному этим именам, могут
появляться только в декларативных процедурах, обрабатывающих
метки.
Вариант ОБЛАСТЬ СЧЕТА и ОБЛАСТЬ СОХРАНЕНИЯ (только
для ОС ЕС) может быть указан при создании последовательных фай-
лов со стандартными метками пользователя. Использование этого ва-
рианта позволяет получить точную информацию относительно каждого
тома многотомного файла и записать ее в конечную метку тома при пе-
реключении томов.
Например, пусть при создании многотомного файла программисту
требуется накопить информацию о количестве записей на томе и по-
местить ее в конечную стандартную метку пользователя каждого тома.
Если при выполнении оператора ПИСАТЬ обнаруживается конец то-
ма, запись, для которой выполнялся этот оператор, записывается после
процедуры переключения томов уже на новый том. Таким образом,
накопленная информация не будет соответствовать точному количест-
ву записей на данном томе. Использование вариантов ОБЛАСТЬ СЧЕ-
ТА, ОБЛАСТЬ СОХРАНЕНИЯ позволяет исправить эту ситуацию.
Имя-данного-3 (ОБЛАСТЬ СЧЕТА) должно быть определено в сек-
ции рабочей памяти. Эго данное используется программистом для
сохранения информации, которая может быть употреблена при создании
стандартных меток пользователя, например контрольной суммы запи-
сей, идентификации внутри каждой записи и т. п. Обычно требуемую
информацию, связанную с текущей записью, программист должен по-
местить в имя-данного-3 перед выполнением оператора ПИСАТЬ.
Исключением являются случаи, когда для данного файла указаны фра-
зы ОБЩАЯ ОБЛАСТЬ и (или) ПРИМЕНИТЬ ОСОБОЕ-ПИСАТЬ.
В таких случаях требуемая информация должна быть помещена в имя-
данного-3 после выполнения оператора ПИСАТЬ. Содержимое имени-
68
данного-3 связывается операционной системой в текущим оператором
ПИСАТЬ.
Имя-данного-4 (ОБЛАСТЬ СОХРАНЕНИЯ) должно быть опреде-
лено на уровне 01 в секции связи и должно содержать поля, описание
которых идентично описаниям таких же полей в данном ОБЛАСТЬ
СЧЕТА. Операционная система отведет место для имени-данного-4
и будет использовать его для сохранения информации, связанной с по-
следней записью, действительно записанной на текущем томе. Таким
образом, при переключении томов содержимое ймени-данного-4 будет,
отражать информацию о записях, действительно записанных на дан-
ный том, и программист Может использовать его при создании конечных
стандартных меток пользователя для текущего тома и начальных ме-
ток пользователя следующего тома.
Если во фразе МЕТКИ статьи описания файла используется ва-
риант ОБЛАСТЬ СЧЕТА (СОХРАНЕНИЯ), первые два байта каждой
записи должны быть зарезервированы для использования операцион-
ной системой. Вариант ОБЛАСТЬ СЧЕТА (СОХРАНЕНИЯ) не может
быть указан для файлов с записями формата S. Выбор правильного ва-
рианта фразы МЕТКИ может быть сделан в помощью табл. 6 в п. 4.2.1,
4.2.5. Фраза ЗНАЧЕНИЕ
Фраза ЗНАЧЕНИЕ конкретизирует описание данного в записях
меток, связанных с файлом, и служит только для документации и обес-
печения совместимости программ при переходе с одной цифровой ЭВМ
на другую.
Формат:
(ЗНАЧЕНИЕ)
|ЗНАЧ ) СЛ0В°-1
слово-2
имя-данного-2
литерал-2
имя-данного-1
.литерал-1
Слово-1 (слово-2) может быть-любым словом языка Кобол, кроме
зарезервированного слова.
Имя-данного-1 (имя-данного-2) должно быть определено в секции
рабочей памяти.
4.2.6. Фраза ЗАПИСИ ДАННЫХ
, Фраза ЗАПИСИ ДАННЫХ называет имена записей в файле и слу-
жит только для документации.
Формат:
ЗАПИСИ ДАННЫХ имя-данного-1 [имя-данного-2]...
Имя-данного-1, имя-данного-2 и т. д.— это имена записей дан-
ных. Каждому имени должна соответствовать статья описания записи
с номером уровня 01. Наличие более одного имени-данного означает,
что файл содержит более одного типа записей данных, которые могут
иметь различные описания. Порядок, в котором перечисляются имена
данных, не имеет значения.
69
4.3. СТАТЬЯ ОПИСАНИЯ ДАННОГО
4.3,1. Общий формат
Статья описания данного — это фраза илн набор фраз, определяю-
щих характеристики отдельного несвязанного данного или данного,
являющегося частью записи. Статья описания данного состоит нз номе-
ра уровня, за которым следуют имя данного и последовательность дру-
гих фраз описания данного. Номера уровней используются для описа- -
ния сложных структур данных, т. е. таких структур данных, в кото-
рых отдельные объекты могут объединяться в группы, которые в свою
очередь могут также объединяться, и т. д., образуя сложную иерар-
хию. В зависимости от того, подразделяются данные в описании на
части или нет, они являются групповыми или элементарными. Данное,
которое не подразделяется в описании на части, называется элементар-
ным данным. Последовательность из одного или более элементарных
данных образует групповое данное. Все групповые и элементарные
данные объединяются в запись, которая определяет высший уровень
иерархии. Высший уровень иерархии, запись, определяется с помощью
минимального номера уровня 01. Соподчиненность данных в записи
определяется номерами уровней из диапазона 02—49. Данное, вхо-
дящее в состав некоторого другого данного, должно иметь численно
больший номер уровня.
Предположим, например, что в программе обрабатываются доку-
менты вида (табл. 7).:
Таблица 7
Личные данные Отработано в месяце Ставка за час; Подлежит оплате
фамилия ИМЯ отчество табель- ный номер часов дней вид оплат сумма часы
Иванов Иван Петрович 3027 180 22 1.00 10 180 180
Одна строка такого документа могла быть описана в программе так:
01 табель.
02 личные-данные.
03 фамилия...
03 имя...
03 отчество ...
03 таб-номер ...
02 отработано.
03 часов ...
03 дней ...
02 ставка-за-час ...
02 оплачено.
03 вид-оллат ...
03 сумма . .
03 часы ... J
70
Номер уровня данного, которое следует за последним элементар-
ным данным предыдущей группы, должен быть равен номеру уровня
одной из групп, к которой принадлежит предыдущее элементарное
данное.
Имеются специальные номера уровней 66, 77 и 88, которые не пред-
назначены для определения структуры записи. Номер уровня 66 при-
сваивается именам элементарных данных и групп, описываемых фра-
вой ПЕРЕИМЕНОВЫВАЕТ в целях перегруппировки данных. Но-
мер уровня 77 присваивается несвязанным данным секции рабочей
памяти и секции связи. Номер уровня 88 присваивается статьям, оп-
ределяющим имена условий, ввязанные в конкретными значениями ус-
ловной переменной. 4
Максимальный размер описываемого данного в секции файлов не
должен превышать 32 767 байт, а в секциях рабочей памяти и связи —
131 071 байт.
Данные, обрабатываемые в программе, можно описать в помощью
статей одного из трех форматов, приведенных ниже.
Общий формат 1:
номер-уровня
’ имя-данного
(ЗАПОЛНИТЕЛЬ
13АП
[фраза ПЕРЕОПРЕДЕЛЯЕТ!
[фраза ПРОБЕЛ КОГДА НУЛЬ!
[фраза СДВИНУТО ВПРАВО]
[фраза ПОВТОРЯЕТСЯ]
[фраза ШАБЛОН]
[фраза ВЫДЕЛЕНО]
[фраза об использовании]
[фраза ЗНАЧЕНИЕ].
Этот формат используется для статей описания записей в секциях
файлов, рабочей памяти и связи, а также для статей описания несвя-
занных данных в секциях рабочей памяти й связи. При использовании
формата необходимо соблюдать следующие правила:
а) номер уровня может быть любым целым числом от 1 до 49 для
статей описания записей или числом 77 для статей описания несвязан-
ных данных;
б) порядок следования фраз произвольный. Исключение состав-
ляет фраза ПЕРЕОПРЕДЕЛЯЕТ, которая должна следовать непосред-
ственно за именем-данного;
в) каждое элементарное данное, за исключением индексных данных
и внутренних данных с плавающей точкой, должно быть описано в
фразой ШАБЛОН. Индексным данным называется данное, описание
которого содержит фразу об использовании в варианте ДЛЯ ИНДЕК-
СА. Индексные данные представляют собой специальный вид данных,
используемый при обработке таблиц;
г) каждая статья описания Данного должна оканчиваться точкой.
71
Фраза ПОВТОРЯЕТСЯ в статье описания данного используется
при описании данных с идентичным форматом и указывает, сколько
раз данные с одинаковым описанием повторяются в записи.
Формат!
ПОВТОРЯЕТСЯ [ОТ целое-1 ДО] целое-2 РАЗ
[В ЗАВИСИМОСТИ ОТ имя-данного-2]
. “ (ВОЗРАСТАНИЮ
1УБЫВАНЙЮ
КЛЮЧА имя-даниого-3 [имя-данного-4]...]...,
[ИНДЕКСИРУЕТСЯ имя-индекса-1 [имя-индекса-2 ]...]
Эта фраза относится к средствам обработки таблиц и будет описана
в соответствующей главе. В этой главе формат этой фразы приводится
в связи с тем, что правила применения других фраз описания могут
зависеть от наличия в описании данных этой фразы в одном из допус-
тимых вариантов.
Данные, в состав которых входят данные, описанные с фразой ПО-
ВТОРЯЕТСЯ с вариантом В ЗАВИСИМОСТИ ОТ, считаются данными
с переменным размером. Все остальные данные относятся к данным в
фиксированным размером. Элементарное данное не может иметь пере-
менный размер.
Общий формат 2:
66 имя-данного фраза ПЕРЕИМЕНОВЫВАЕТ.
Этот формат используется для переименования групп данных. При
использовании этого формата должны выполняться следующие требо-
вания:
а) статья с номером уровня 66 не должна переименовывать статьи
с номерами уровней 66, 77 и 88;
б) все статьи с номером уровня 66, связанные с данной логической
записью, должны непосредственно следовать за последней статьей опи-
сания данного в записи;
в) статья должна оканчиваться точкой.
Общий формат 3:
88 имя-условия фраза ЗНАЧЕНИЕ.
Этот формат используется для присваивания имен-условий кон-
кретным значениям условной переменной. При описании имен-условий
необходимо соблюдать следующие правила:
а) каждое имя-условия требует отдельную статью описания в
уровнем 88;
б) статьи имен-условий для конкретной условной переменной долж-
ны следовать непосредственно за статьей описания условной перемен-
ной;
в) имя-условия может быть связано с любым данным, кроме дру-
гого имени условия, данного с уровнем 66, индексного данного, а также
группы, содержащей элементарные данные, в описание которых вхо-
дят фразы СДВИНУТО ВПРАВО, ВЫДЕЛЕНО и фраза об исполь-
зовании (кроме варианта ДЛЯ ВЫДАЧИ);
г) статья должна оканчиваться точкой.
72
Имена-условий могут ивпользоватьвя вместо соответствующих ус-
ловных выражений в условных операторах раздела процедур.
Пусть, например, запись с некоторыми статистическими сведения-
ми описана следующим образом:
01 стат-запись.
02 код-пола ШАБЛОН 9.
88 женский ЗНАЧЕНИЕ 0.
88 мужской ЗНАЧЕНИЕ 1.
02 код-образования ШАБЛОН 9.
88 среднее ЗНАЧЕНИЕ 1
88 высшее ЗНАЧЕНИЕ 2.
Здесь «код-пола» и «код-образования» — условные переменные, а
«женский», «мужской», «среднее» и «высшее» — имена-условий. Для
проверки, например, такого условия:
ЕСЛИ код-пола = 0 И код-образования = 2...
могут быть использованы имена соответствующих условий следующим
образом:
ЕСЛИ женский И высшее....
4.3.2. Фраза имя-данного или ЗАПОЛНИТЕЛЬ'
Фраза имя-данного или ЗАПОЛНИТЕЛЬ используется для ука-
зания-имени данного или отсутствия у данного индивидуального
имени.
Формат:
вомер- уровня
имя-данного
ЗАПОЛНИТЕЛЬ
ЗАП
Имя-данного — это имя, присваиваемое программистом данному,
используемому в программе. В статьях с уровнем 77 и 01 в секциях
рабочей памяти и связи должны быть определены уникальные имена-
данных, так как они не могут быть уточнены. Подчиненные имена-
данных могут быть одинаковыми, если их можно уточнить.
Слово ЗАПОЛНИТЕЛЬ используется для описания данного, кото-
рому нет необходимости присваивать имя, так как на него нет ссы-
лок в разделе процедур, но для которого надо отвести место в основной
памяти. Слово ЗАП является сокращением слова ЗАПОЛНИТЕЛЬ.
Имя-данного или ключевое слово ЗАПОЛНИТЕЛЬ должно быть
первым словом после номера уровня в статьях описания данных.
4.3.3. Фраза ШАБЛОН
С помощью фразы ШАБЛОН программист компактным образом
сообщает транслятору основные характеристики элементарного дан-
ного такие, как размер, категория и -класс. Кроме того, эта фраза ис-
пользуется для редактирования данных.
73
Формат?
(ШАБЛОН 1
j щ-------J строка-лихер
Слово ШАБЛОН сокращенно может записываться как Ш.
Фраза ШАБЛОН может использоваться только в статьях описания
элементарных данных. Она не должна использоваться в статьях опи-
сания индексных данных и внутренних данных в плавающей точкой.
4.3.3.1 Литеры шаблона
Строка-литер во фразе ШАБЛОН составляется по определенным
правилам из следующего набора литер и сочетаний литер? А, В, Е,
3, М, П, Т, X, 0, 9, /, ,, +, —, *, КР, ДБ и валютного символа.
Строка-литер во фразе ШАБЛОН будет называться шаблоном.
Каждая литера шаблона имеет определенную смысловую нагрузку.
Литера А указывает, что соответствующая позиция в данном мо-
жет содержать только буквенную литеру или пробел. Каждая литера
А в шаблоне учитывается при подсчете размера данного. Множество
буквенных литер зависит от наличия в разделе оборудования фразы
ПРОГРАММНЫЙ АЛФАВИТ, связанной со специальным алфави-
том. Если такая фраза присутствует, множество буквенных литер
включает буквы русского и латинского алфавитов. Если такая фраза
отсутствует, множество буквенных литер состоит только из букв ла-
тинского алфавита.
Литера В указывает, что в соответствующую позицию в значении
данного, будет вставлен пробел. Каждая литера В> в шаблоне учитывает-
ся при подсчете размера данного.
Литера Е используется для представления показателя степени в
шаблоне внешних данных в плавающей точкой и может появиться в
шаблоне только один раз. Учитывается при подсчете размера данного.
Литера П может представлять только ведущие цифровые позиции
данного. Если такие позиции в данном содержат нули, они будут за-
менены пробелами. Каждая литера П в шаблоне учитывается при под-
счете размера данного.
Литера Т указывает положение неявной десятичной точки внутри
описываемого цифрового данного и может появиться в шаблоне только
один раз. Литера Т не занимает позиции литеры и, следовательно, не
учитывается ври подсчете размера данного. Если неявная десятичная
точка находится! в шаблоне справа от крайней правой литеры, литеру
Т указывать не нужно.
Литера X означает, что в соответствующей позиции данного может
содержаться любой символ из набора кодов ДКОИ. Каждая литера X
в шаблоне учитывается пртг подсчете размера данного.
Литера 0 означает вставку нуля в соответствующую позицию дан-
ного. Каждая литера 0 в шаблоне учитывается при подсчете размера
данного.
Литера 9 указывает, что соответствующая позиция данного долж-
на содержать цифру. Каждая литера 9 учитывается в размере данного.
74
Литера/означает вставку дробной черты {/) в соответствующую по-
зицию данйого. Каждая литера / в шаблоне учитывается при подсчете
размера данного.
Литера 3 используется для обозначения операционного знака дан-
ного, т. е. указывает, что значение данного может быть положитель-
ным или отрицательным. Литера 3 должна быть крайней левой лите-
рой шаблона. Она не учитывается при подсчете размера данного.
Литера М используется для указания десятичной масштабной по-
зиции и [юложения неявной десятичной точки вне ноля, занимаемого
данным. Она используется для описания чисел, которые могут быть
представлены в виде двух сомножителей, одним из которых является
степень 10, т. е. таких, например: 421000, 0.00001. Литеры М
не учитываются при подсчете размера данного во внутреннем
представлении, но учитываются при подсчете количества цифровых
позиций в числовых редактируемых данных и данных, участвующих
в арифметических операциях. Литеры масштабной позиции в шаблоне
могут появиться в виде связной строки из М слева или справа от дру-
гих литер шаблона. Если М в шаблоне слева, то это означает, что
неявная десятичная точка находится левее самого левого М; если М
в шаблоне справа, то неявная десятичная точка находится правее
самого правого М. Слева от строки'литер из М могут появиться только
3 и Т.
Литера «,» означает вставку занятой в соответствующую позицию
данного. Эта литера учитывается при подсчете размера данного. Она
не может быть последней литерой шаблона.
Литера «.» указывает положение явной десятичной точки и пред-
ставляет позицию данного, в которую будет вставлена точка. Литера
«.» может появиться в шаблоне только один раз. Эта литера учитывает-
ся при подсчете размера данного. Она не может быть последней лите-
рой шаблона.
Примечание. Дли конкретной программы функции точки и запятой в шаб-
лоне можно обменять, употребив в параграфе СПЕЦИАЛЬНЫЕ-ИМЕНА фразу
ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ.
Литеры +, —, КР, ДБ — редактирующие символы управления
внаком. Они означают вставку в соответствующую позицию знака дан-
ного, символа управления знаком или «робела в соответствии с табл. 8.
Эти символы в шаблоне взаимно исключают друг друга. Каждая литера
символа учитывается в размере данного.
Таблица®
Редактирующий символ в шаблоне , Вставляемые литеры
Данное волФзкительдгое или нуль Данное втрицателъвте
+ + —
КР . . . КР
ДБ •— —• ДБ
,75
Литера * — символ защиты чека. Он может представлять только
ведущие цифровые позиции и означает замену нуля звездочкой в соот-
ветствующей позиции данного. Каждая литера * учитывается в размере
данного.
Валютный символ в строке литер шаблона может быть представлен
литерой б (знак денежной единицы) или литерой, определенной во
фразе ВАЛЮТНЫЙ ЗНАК параграфа СПЕЦИАЛЬНЫЕ-ИМЕНА,
и указывает позицию, в которую должен быть вставлен валютный
знак. Валютный символ учитывается при подсчете размера данного.
Для сокращения написания шаблона вместо ряда одинаковых ли-
тер можно написать одну, а за ней в круглых скобках указать число
ее повторений. Например, А(40) означает 40 последовательных повто-
рений литеры А.
4.3.3.2. Размер данного
Фраза ШАБЛОН определяет размер элементарного данного в стан-
дартном формате данных. Этот размер подсчитывается на основании
количества позиций литер, указанных в шаблоне, и используется
транслятором при генерации команд для реализации операций внут-
ренней обработки, например арифметических операций, операций
пересылки и сравнения. Этот размер может отличаться от физического
размера данных, который представляет количество байт основной па-
мяти, требуемых для размещения этого данного, и определяется фразой
ШАБЛОН и фразой об использовании. Физический размер данного
должен использоваться при определении размера записи во фразе
В ЗАПИСИ и размера блока во фразе В БЛОКЕ.
4.3.3.3. Категория и класс данного
С помощью фразы ШАБЛОН можно описать, пять категорий данных:
числовую, буквенную, буквенно-цифровую, буквенно-цифровую ре-
дактируемую и числовую редактируемую.
Эти пять категорий данных объединяются в три класса: числовой,
буквенный и буквенно-цифровой. Для числовых и буквенных дан-
ных понятия категории и класса совпадают. Буквенно-цифровой класс
объединяет три категории данных: буквенно-цифровую, буквенно-
цифровую редактируемого, числовую редактируемую. Каждое элемен-
тарное данное принадлежит к одному из трех классов и одной из
пяти категорий.
Данное определяется как буквенное, если строка литер его шаблона
содержит только литеру А, а значение представляет собой любое
сочетание буквенных литер и пробела.
Если в параграфе РАБОЧАЯ-МАШИНА в разделе оборудования
не указана фраза ПРОГРАММНЫЙ АЛФАВИТ или во фразе
ПРОГРАММНЫЙ АЛФАВИТ указано имя алфавита, -относящееся
к внутреннему алфавиту, значение буквенного данного должно содер-
жать буквы только латинского алфавита. Если фраза ПРОГРАММНЫЙ
АЛФАВИТ указана и имя-алфавита относится к специальному алфа-
виту, вначение буквенного данного может «овтоять из букв русского
и латинского алфавитов. •
Данное определяется как буквенно-цифровое, еели его шаблон пред-
ставляет собой сочетание литер А, X, 9, а значение «одержит любые
литеры из набора кодов ДКОИ. Шаблон, состоящий только из А или
только из 9, не определяет данное как буквенно-цифровое.
Различают два вида числовых данных: числовые данные • фикси-
рованной точкой и числовые данные с плавающей точкой.
Числовые данные с фиксированной точкой. Шаблон таких данных
может представлять сочетание литер 9, 3, М, Т. Значение его должно
состоять из цифр 0—9 и может включать операционный знак. Коли-
чество цифровых позиций в шаблоне не должно превышать 18.
В зависимости от способа представления в-основной памяти, кото-
рый определяется фразой об использовании (ем. п. 4.3.5), числовые
данные с фиксированной точкой делятся на три типа: внешние деся-
тичные, двоичные, внутренние десятичные.
Числовые данные с плавающей точкой. В формате в плавающей
точкой могут быть представлены числа, находящиеся в диапазоне от
5.4 • 10-’9 до 0.72 • Ю7®. В зависимости от способа представления
в основной памяти, который определяется фразой об использовании,
различают два типа данных с плавающей точкой: внешние данные
в плавающей точкой и внутренние данные в плавающей точкой.
В статье описания внутренних данных в плавающей точкой фраза
ШАБЛОН не допускается. Его значение должно состоять из цифр
0—9 и может содержать операционный знак.
Шаблон внешних данных с плавающей точкой содержит последо-
вательность из следующих литер:
а) литеры + или —:
литера + означает, что положительные значения представляются
с плюсом, а отрицательные — с минусом;
литера — означает, что положительные значения представляются
с пробелом на месте знака, а отрицательные — с минусом. Литеры +
или — в шаблоне должны непосредственно предшествовать мантиссе
и показателю степени;
б) от 1 до 16 литер 9, представляющих мантиссу с ведущей, встав-
ленной или конечной явной или неявной десятичной точкой (. или Т);
в) литеры Е, означающей, что за ней. следует показатель степени.
Эта литера занимает один байт во внутреннем представлении данного
и присутствует при выводе на печать;
г) две литеры 9, представляющие показатель степени.
Примеры:
Шаблон данного Значение данного
—99Т99Е — 99 —3117 Е —04
— 2600Е —02
4-99.9Е4-99 +18.8Е4-1О
Данное определяется как буквенно-цифровое редактируемое, если
его шаблон представляет собой определенные сочетания следующих
литер: А, X, 9, В, 0, /. Шаблон такого данного должен содержать по
77
крайней мере по одной литере в таких сочетаниях: X и В, X и О, X и
А и О, А и /. Значение данного может состоять из любых символов,
допустимых в наборе ДКОИ. Эти данные подвергаются только одно-
Л му типу редактирования: простой вставке нуля, пробела и дробной
черты (см. п. 4.3.3.4).
Примеры шаблонов буквенно-цифровых редактируемых данных»
ХХВХХ, ХХ/ХХ/ХХ
Данное определяется как цифровое редактируемое, если его шаб-
лон содержит определенные сочетания следующих литер: В, М, Т, П,
О, 9, ,, *, +, —, КР, ДБ и валютного символа. Максимальное ко-
личество цифровых позиций, которые могут быть представлены шаб-
лоном, равно 18. Для цифровых редактируемых данных допустимы
все типы редактирования, которые описаны ниже.
4.3.3.4. Типы редактирования
Имеются два общих способа редактирования в помощью фразы
ШАБЛОН: вставка или подавление с замещением.
Различают четыре типа редактирования вставкой: простая встав-
ка, специальная вставка, фиксированная вставка и плавающая вставка
и два типа редактирования подавлением и замещением: подавление
ведущих нулей и замещение их пробелами и подавление ведущих
нулей и замещение их звездочками.
Редактирование простой вставкой выполняется при помощи еле-
дующих литер вставки: , (вставка запятой), В (вставка пробела), /
(вставка дробной черты), 0 (вставка нуля). Каждая из этих литер
в шаблоне означает, что данная литера будет вставлена в позицию
в значении данного, определяемую положением этой литеры в шаблоне.
Только этот тип редактирования допустим для буквенно-цифровых
редактируемых данных.
Редактирование специальной вставкой указывается литерой . (точ-
ка) в качестве знака вставки. В результате редактирования точка по-
является в значении данного в той позиции, которая определена в шаб-
лоне. Кроме того, она используется для выравнивания целой и дроб-
ной частей значения данного в соответствии с положением десятичной
точки в шаблоне. Одновременно использование литеры . и литеры Т
в одном шаблоне недопустимо.
Редактирование фиксированной вставкой выполняется использо-
ванием следующих литер: валютного символа и +-, —, КР, ДБ (редак-
тирующих символов управления знаком). При таком редактировании
в шаблоне может использоваться только один валютный символ и толь-
ко один из редактирующих символов управления знаком.
Валютный символ, который в шаблоне представляется либо знаком
денежной единицы (6),. либо литерой, определенной во фразе
ВАЛЮТНЫЙ ЗНАК, должен быть крайней левой литерой шаблона,
если только ему не предшествует + или —. Когда используется сим-
вол -(- или —, он должен быть крайней левой или крайней правой
литерой шаблона. Любой из символов КР, ДБ должен занимать край-
78
нюю правую позицию в шаблоне. Результат редактирования символа-
ми управления знаком зависит от значения данного, как было пока-
зано в табл. 8.
Редактирование плавающей вставкой — это редактирование с по-
мощью шаблона, в котором одна из литер +, — или валютный символ
повторяется подряд не менее двух раз, т. е. образует плавающую стро-
ку. Плавающая строка может представлять только ведущие или все
цифровые позиции данного. Одновременное использование валют-
ного символа и литеры + или — в качестве литер плавающей вставки
в шаблоне не допускается. Если в шаблоне среди литер плавающей
вставки или непосредственно справа от них встречаются литеры простой
вставки /, В, 0), они рассматриваются как часть плавающей строки.
Литеры плавающей вставки в шаблоне могут располагаться либо
слева от десятичной точки, либо соответствовать всем цифровым по-
зициям данного.
Если литеры плавающей вставки находятся слева от десятичной
точки, то одна литера вставки будет помещена перед первой ненулевой
цифрой данного из представленных плавающей строкой или перед де-
сятичной точкой в зависимости от того, которая из них встретится рань-
ше. Все предшествующие позиции будут заполнены пробелами.
Если литеры плавающей вставки определены на всю длину данного
и значение данного равно нулю, то в результате редактирования дан-
ное будет содержать пробелы. Если значение данного не равно нулю,
то результат редактирования будет такой же, как и в случае, когда
литеры плавающей вставки находятся только слева от десятичной
точки.
Если первая цифра данного не является нулем, литера вставки по-
мещается на место этой цифры. Чтобы избежать усечения значащих
цифр при редактировании плавающей вставкой, необходимо указать
минимальный размер принимающего данного как сумму следующих
величин:
а) количества литер в посылаемом данном;
б) количества литер вставки (кроме литер плавающей вставки),
определенных для принимающего данного;
в) одной литеры плавающей вставки.
Редактирование подавлением нулей и замещением. Редактирование
подавлением нулей и замещением означает замену ведущих нулей
в значении данного литерой замещения: пробелами, если в шаблоне
в качестве литеры подавления использовалась П, или звездочками,
если в шаблоне использовалась *. Не допускается в одном шаблоне
использовать литеры плавающей вставки (+, —, о) и литеры П или *.
Редактирование подавлением и замещением указывается в шаблоне
строкой из одной или нескольких литер П или *, представляющих
ведущие цифровые позиции данного, в которых нули должны быть за-
менены литерой замещения. Литеры простой вставки, находящиеся
в строке литер подавления или непосредственно справа от нее, являют-
ся частью этой строки. Литеры простой или фиксированной вставки,
находящиеся слева от строки литер подавления, в нее не входят.
79
Литеры подавления и замещения в шаблоне могут быть только еле*
ва от десятичной точки или распространяться на вее цифровые пози-
ции данного.
Если литеры подавления находятся в шаблоне только слева от де-
сятичной точки, ведущие нули в значении данного, появляющиевя в по-
зициях, соответствующих втроке литер подавления в шаблоне, заме-
няются литерой замещения. Подавление ваканчивается на первой не-
нулевой цифре данного или десятичной точке в вависимости от того,
какая из них встретится первой.
Если все цифровые позиции в шаблоне представлены литерами по-
давления, а значение данного не равно нулю, то результат редактиро-
вания такой же, как если бы литеры подавления находились только
слева от десятичной точки. Если значение данного равно нулю, то ре-
зультатом редактирования будут пробелы, если литера подавления П,
или звездочки (и явная десятичная точка, если она была, указан а),
если литера подавления *.
Редактирование различных типов показано в табл. 9 на приме-
рах:
• 1—2 — простая вставка;
3—5 — специальная вставка;
6—9 — фиксированная, вставка;
10—14 — плавающая вставка;
15—22 — подавление нулей и замещение.
Таблица 9
Номер примера Шаблон редактирования Значение пебылаемого данного _ Результат редактирования
г 99В999В999 12345678 12—345—678
2 ХХ/ХХ/ХХ 010976 01/09/76
3 99.99 12 Л 34 12.34
4 999.9 12Д34 - 012.3
5 9.9(4) 12Д34 . 2.3400
6 +99 12 + 12
7 +99 —23 —23
8 99КР +45 45
9 99КР —20 20КР
10 .99 012 д 34 __12.34
И .99 —001 Л 234 —1.23
12 В .99 —01234 Л 56 —1_234.56
13 ++++.99 0 .00
14 ++++•++ 1234 Л 00 +234.00
15 ♦ * * * gg 10Д34 **10.34
16 ПППП. 99 ЮЛ 34 — 10.34
17 ПППП.99 0 , 00
18 пппп.пп 0
19 ♦ *** 0 *♦♦♦,♦*
20 пппп.пп 1034 Л 567 1034.56
21 П999.99 ЮЛ 34 _010.34
22 ПП.П9 10 _ 10
Зваком д отмечено положение неявной десятичной точки.
80
4.3.4. Фраза ПРОБЕЛ КОГДА НУЛЬ
Наличие этой фразы К статье опивания данного означает замену
при выводе данного пробелами, если его вначение равно нулю.
Формат:
ПРОБЕЛ КОГДА НУЛЬ
Фраза ПРОБЕЛ КОГДА НУЛЬ может быть указана только на
уровне элементарного числового или чиелового редактируемого дан-
ного. Когда она используется для чиелового данного, категория
данного вчитается числовой редактируемой.
4.3.5. Фраза об использовании
Фраза об использовании указывает основное использование и
способ представления данного в основной памяти.
Фраза об использовании может быть указана как на уровне эле-
ментарного, так и на уровне группового данного. Если эта фраза ука-
зана на уровне группового данного, она распространяется на каждое
элементарное данное группы и в этом случае фраза об использовании
для элементарного данного не должна противоречить фразе об ис-
пользовании группы, которой это элементарное данное принадлежит.
Формат:
ДЛЯ
(ВЫЧИСЛЕНИЙ '
|ВЫЧ
(ВЫЧИСЛЕНИЙ-1 •
|ВЫЧ-1
(ВЫЧИСЛЕНИЙ-2 1
(ВЫЧ-2
(ВЫЧИСЛЕНИЙ-3 '
| ВЫЧ-3
ВЫДАЧИ
ИНДЕКСА
Слова ВЫЧ, ВЫЧ-1, ВЫЧ-2, ВЫЧ-3 являются соответственно
сокращениями слов ВЫЧИСЛЕНИЙ, ВЫЧИСЛЕНИЙ-1, ВЫЧИС-
ЛЕНИЙ-2, ВЫЧИСЛЕНИЙ-3.
Вариант ДЛЯ ВЫЧИСЛЕНИЙ определяет двоичное данное. Та-
кое данное имеет десятичный эквивалент, состоящий из цифр 0—9 и,
если необходимо, операционного знака. В основной памяти двоичное
данное может занимать два байта (половину слова), четыре байта
(полное слово) или 8 байт (двойное слово) соответственно размерам
данных от 1 до 4, от 5 до 8 й от 9 до 18 цифр. Например, данное А
ШАБЛОН 9(5) ДЛЯ ВЫЧИСЛЕНИЙ будет занимать 4 байта основ-
81
ной памяти. Крайний левый бит области, отведенной под данное, ив-
пользуется для представления знака данного. Единица в этом бите
означает, что данное отрицательное, нуль — что данное положитель-
ное. Следует помнить, что отрицательные двоичные числа представ-
ляются в виде дополнения до двух.
Вариант ДЛЯ ВЫЧИСЛЕНИЙ-1 определяет внутреннее данное
с плавающей точкой с короткой мантиссой, занимающее 4 байта основ-
ной памяти. В таком формате мантисса занимает три крайних правых
байта области, отведенной под данное. Для представления знака ман-
тиссы используется крайний левый бит, а показатель степени распо-
лагается в битовых позициях 1—7 крайнего левого байта области,
отведенной под данное.
Вариант ДЛЯ ВЫЧИСЛЕНИЙ-2 определяет внутреннее данное
с плавающей точкой с длинной мантиссой, занимающее 8 байт основной
памяти. Знак мантиссы и показатель степени такого данного распола-
гаются так же, как и в формате с короткой мантиссой. Мантисса в та-
ком формате занимает 7 крайних правых байт области, отведенной под
данное.
Вариант ДЛЯ ВЫЧИСЛЕНИЙ-3 определяет внутреннее десятич-
ное данное. В основной памяти такие данные представлены в упако-
ванном десятичном формате, т. е. в каждом байте поля, отведенного
под данное, кроме последнего байта, располагаются по две цифры.
Четыре младших бита последнего байта отводятся под знак данного
Если знак в шаблоне не указан, биты знака заполняются четырьмя
единицами (шестнадцатеричное «F»). Если знак в шаблоне указан,
положительные числа будут содержать в битах знака двоичную ком-
бинацию «1100» (шестнадцатеричное «С»), а отрицательные — комби-
нацию «1101» (шестнадцатеричное «D»),
Пример.
ш Описание данного 9(5) ВЫЧ-3 Значение 45233 Представление в основной памяти
| 4 ( 5 | 2 , 3 1 3 , ,F .1
ш 39(5) ВЫЧ-3 —42233 байт | 4 , .2 | 2 , 3 1 3 , знак D |
ш 39(5) ВЫЧ-3 4 42233 байт 1 4 , 2 | 2 , 3 знак '—' 1 3 , с I
байт знак ' + '
Вариант ДЛЯ ВЫДАЧИ может быть использован в описании бук-
венных, буквенно-цифровых, буквенно-цифровых редактируемых, чис-
ловых редактируемых и внешних десятичных данных и означает, что
каждая литера данного будет занимать один байт основной памяти.
Четыре старших бита этого байта представляют зонную часть числа,
а четыре младших — числовую. Такой формат представления называ-
ется зонированным форматом. Если в зонированном формате представ-
ляется число со знаком, то знак будет располагаться в зонной части
младшей литеры значения данного,
82
Пример.
Описание дт иного Значение данного Представление в основной памяти
Ш X ДЛЯ ВЫДАЧИ А 1 с ’ . । 1
Ш 99 ДЛЯ ВЫДАЧИ 12 зона цифра IF, 1 | F t 2 |
Ш 3999 ДЛЯ ВЫДАЧИ 4-425 зона цифра зона цифра байт IF , 4 | F, 2 | С ,5
зона цифра зона цифра зона цифра
знак
данного
Примеры предетавления данных е различным использованием при-
ведены в табл. 10.
Таблица 10
Тип данного Значение Описание Внутреннее представление
Внешнее десятичное —1234 ДЛЯ ВЫДАЧИ ШАБЛОН 9(4) ДЛЯ ВЫДАЧИ ШАБЛОН 39(4) | Z, 1 1 Z , 2 1 Z,3 I Z^4j
байт | Z,1 | Z,2 | Z , 3 | D|4 |
байт См. примечание 1
Двоичное —1234 ДЛЯ ВЫЧИСЛЕНИЙ ШАБЛОН 3999 | 1111 | 1011 | 0010 1 1110 (
t, Знак ’ байт См. примечание 2
Внутреннее десятичное + 1234 ДЛЯ ВЫЧИСЛЕНИЙ-3 ШАБЛОН 9999 ДЛЯ ВЫЧИСЛЕНИЙ-3 ШАБЛОН 39999 | 01 | 23 | 4F | байт | 01 I 23 1 4С | байт
Внешнее с плавающей точкой 4-12.34Е4-2 ДЛЯ ВЫДАЧИ ШАБЛОН 4-99.99Е—99 |+| 1| 2| ,| 3| 4|Е| | 0| 2 |
байт
Внутреннее с плавающей точкой ДЛЯ ВЫЧИСЛЕНИЙ-1 ДЛЯ ВЫЧИСЛЕНИЙ-2 | 3 | Показатель | Мантисса)
0 1 7 8 31 | 3 | Показатель | Мантисса |
0 1 7 8 63
83
В этой таблице используются следующие обозначения!
Z — зона, эквивалентная шестнадцатеричному F, битовая ком-
бинация 1111; ,
F — непечатаемый знак плюс;
С — внутренний эквивалент знака плюс, битовая комбинация 1100;
Р — внутренний эквивалент знака минус, битовая комбинация 1101;
3 — позиция знака (+, —) цифрового поля; 1 в этой позиции
означает, что число отрицательное, 0 — число положительное.
Примечая и я: 1. D4, представляющее —4, имеет в коде ДКОИ такую
же комбинацию бит, как н М.
2. Отрицательные двоичные числа в памяти представлены в форме дополне-
ния до 2.
Фраза ДЛЯ ИНДЕКСА в статье описания данного определяет это
данное как индексное. Если эта фраза используется, никаких других
фраз (в том числе фразы ШАБЛОН) в статье описания данного не долж-
но быть. Эта фраза относится к средствамобработки таблиц и подроб-
но рассматривается в соответствующей главе.
Если фраза об использовании не указана в статье описания данного,
предполагается, что используется данное ДЛЯ ВЫДАЧИ.
4.3.6. Фраза ВЫДЕЛЕНО
Фраза ВЫДЕЛЕНО в статье описания данного означает, что эле-
ментарному данному в основной памяти должно быть выделено отдель-
ное ноле размером в половину машинного слова, слово или двойное
слово, выровненное на границу с адресом, Кратным соответственно
2,4 или 8. Использование этой фразы повышает эффективность выпол-
нения арифметических операций и операций сравнения. На размер
элементарного данного, определяемый фразой ШАБЛОН, эта фраза
не влияет.
Формат:
ВЫДЕЛЕНО
[ВЛЕВО
ВПРАВО
Варианты ВЛЕВО, ВПРАВО рассматриваются как комментарий.
Эта фраза может появиться в статье описания элементарного дан-
ного либо в статье описания записи (на уровне 01). Если она появляет-
ся в статье описания записи, это означает, что выделяется каждое
элементарное данное записи. Если фраза ВЫДЕЛЕНО распростри
няется на данное, которое подчиняется действию фразы ПОВТОРЯЕТ-
СЯ, выделяется каждое повторение данного.
При выделении данного в основной памяти между этим данным
и предшествующим ему могут появиться неиспользуемые байты. На-
пример, в основной памяти с относительного адреса 0 располагаются
одно за другим данные А1 размером 2 байта и В1 размером 4 байта.
Причем данное В1 требует выравнивания на границу слова. Чтобы В1
имело правильную границу, оно должно располагаться с относитель-
84
ного адреса 4. Таким образом между данными А1 и В1 появляются два
неиспользуемых байта памяти, как показано на рис. 8. Эти неисполь-
вуемые байты называются дополняющими байтами.
Данное А1 /Неиспользуемые/ Данное В1 < I . I
, ___I__I I I
0 1 2 3 4 S3 7 8
Рис. 8. Выравнивание данного В1 на границу слова
Граница выравнивания зависит от размера и способа представле-
ния данного в основной памяти, определяемого фразой об использова-
нии.
Если фраза ВЫДЕЛЕНО определена для двоичного данного, вы-
полняется следующее:
а) если его размер по шаблону находится в диапазоне от 1 до 4 ‘
цифр, данное выравнивается на границу половины слова, кратную 2;
б) если его размер по шаблону находится в диапазоне от 5 до 18
цифр, данное выравнивается на границу полного слова, кратную 4.
Внутренние данные с плавающей точкой в короткой мантиссой вьГ-
равниваются на границу полного слова, а е длинной мантиссой — на
границу двойного слова, кратную 8 .
Для всех данных с использованием ДЛЯ ВЫДАЧИ и внутренних
десятичных данных фраза ВЫДЕЛЕНО рассматривается как коммен-
тарий.
Примечание. Далее в этом пункте термин «вычислительный» будем
относить к данным, использование которых ДЛЯ ВЫЧИСЛЕНИЙ, ДЛЯ ВЫ-
ЧИСЛЕНИЙ-1, ДЛЯ ВЫЧИСЛЕНИЙ-2, т. е. данных, для которых применение
фразы ВЫДЕЛЕНО имеет смысл.
Если фраза ВЫДЕЛЕНО указана в статье описания переопреде-
ляющего данного, т. е. данного, описанного с фразой ПЕРЕОПРЕДЕ-
ЛЯЕТ, переопределяемое данное должно быть выровнено на границу,
которую требует выравнивание переопределяющего данного. Пусть,
например, имеется следующее описание:
02 ставка-сдельная ШАБЛОН 999Т99.
02 ставка-тариф ПЕРЕОПРЕДЕЛЯЕТ ставка-сдельная
ШАБЛОН 999Т99 ДЛЯ ВЫЧИСЛЕНИЙ ВЫДЕЛЕНО.
- В этом случае программист должен обеспечить, чтобы данное «став-
ка-сдельная» располагалось в памяти с границы полного слова.
Если фраза ВЫДЕЛЕНО указана для вычислительного данного,
которое является первым элементарным данным, подчиненным данно-
му, описанному с фразой ПЕРЕОПРЕДЕЛЯЕТ, его выравнивание
не должно требовать дополняющих байт.
Если фраза ВЫДЕЛЕНО не указана для вычислительных данных,
никакого выделения этих данных при размещении их в памяти не про-
изводится, т, е, данные располагаются в основной памяти подряд, без
85
каких-либо промежутков. Однако, если такие данные участвуютs ариф-
метических операциях, транслятор строит команды для пересылки этих
данных в рабочую область, имеющую правильную границу, требуемую
для выполнения машинных команд.
Транслятором предполагается, что все записи в секции файлов,
содержащие вычислительные данные о фразой ВЫДЕЛЕНО, начина-
ются в области ввода-вывода на границе двойного слова. Следователь-
но, программист должен обеспечить требуемые дополняющие байты
между записями.
В секции рабочей памяти транслятор сам выравнивает данные, опи-
санные с уровнем 01, на границу двойного слова.
Предполагается, что данные а уровнем 01 и 77 в секций связи
начинаются на границе двойного слова. Поэтому, вела в программе
используется оператор ВЫЗВАТЬ, программист должен обеспечить
необходимое выравнивание операндов, перечисленных в варианте
ИСПОЛЬЗУЯ оператора ВЫЗВАТЬ.
Дополняющие байты. Имеются два типа дополняющих байт: до-
полняющие байты внутри записи и дополняющие байты между запися-
ми . Дополняющие байты внутри записи — это неиспользуемые пози-
ции, предшествующие каждому вычислительному данному, описанно-
му с фразой ВЫДЕЛЕНО. Дополняющие байты между записями —
это неиспользуемые позиции, добавляемые между логическими запи-
сями, группируемыми в блок.
Дополняющие байты внутри записи. Для выходных файлов и
в секции рабочей памяти i ранслятор вставляет дополняющие байты
внутри записи, чтобы обеспечить правильные границы всех вычисли-
тельных данных, описанных с фразой ВЫДЕЛЕНО. Для входных фай-
лов и в секции связи транслятор предполагает присутствие дополняю-
щих байт, если они требуются для обеспечения правильного выравни-
вания, поэтому программист должен позабошгься о том, чтобы описа-
ние входного файла соответствовало описанию этого,файла, когда он
создавался как выходной.
Необходимость и количество дополняющих байт определяются
транслятором по следующему алгоритму:
а) подсчитывается общее количество байт, занимаемых всеми эле-
ментарными данными, предшествующими вычислительному данному,
включая все ранее вставленные дополняющие байты;
б) эта сумма делится на /и, где т — 2 для двоичных данных, имею-
щих размер не более 4; /м = 4 для двоичных данных, размер которых
больше или равен 5, и для внутренних данных с плавающей точкой
с короткой мантиссой; т— 8 для внутренних данных с плавающей
точкой с длинной мантиссой.
Если остаток от деления (г) не равен нулю, то число дополняющих
байт равно т — г, если остаток от деления (г) равен нулю, то допол-
няющих байт не требуется.
Дополняющие байты вставляются непосредственно за элементар-
ным данным, которое предшествует вычислительному данному с фра-
зой ВЫДЕЛЕНО. Они определяются как буквенно-цифровые данные
с номером уровня, равным номеру уровня элементарного данного, не-
86
посредственно предшествующего выравниваемому данному, и включа-
ются в размер группового данного, которое их «одержит.
Пример.
01 групповое.
02 поле-1 ШАБЛОН Х(5).
02 поле-2.
03 подполе-1 ШАБЛОН XX.
[03 доп-байты ШАБЛОН X.J
03 подполе-2 ШАБЛОН 39(6) ВЫЧ ВЫДЕЛЕНО
01 поле.
02 область-1 ШАБЛОН Х(5).
02 область-2 ШАБЛОН XX.
[02 доп-байт ШАБЛОН X.J
02 область-3.
03 часть ШАБЛОН 39(6) ДЛЯ ВЫЧИСЛЕНИЙ ВЫДЕЛЕНО.
В этом и следующих примерах в квадратных скобках показаны
дополняющие байты, которые вставляются транслятором. Описы-
вать эти байты в исходной программе не требуется, но можно указать
их для документации, так как они должны учитываться при подсчете
размера записи.
Дополняющие байты могут также добавляться транслятором между
каждым повторением группового данного, в состав которого входят
вычислительные данные, описанные s фразой ВЫДЕЛЕНО. В этом
«лучае необходимое количество дополняющих байт определяется по
•ледующему' алгоритму:
а) транслятор подсчитывает размер группы, включая все необхо-
димые дополняющие байты внутри группы;
б) этот размер делится на наибольшее т, требуемое выравнивае-
мым данным внутри группы;
в) если г равно нулю, то дополняющие байты не требуются. Евли р
не равно нулю, надо добавить т — г дополняющих байт.
Дополняющие байты вставляются в конце каждого повторения
группового данного, содержащего фразу ПОВТОРЯЕТСЯ. Например,
пусть запись определена следующим образом;
01 наряд.
02 шифр-работ ШАБЛОН X.
02 таблица ПОВТОРЯЕТСЯ Ю РАЗ,
03 тип-p ШАБЛОН X.
[03 доп-байты ШАБЛОН XX.)
03 зарплата ШАБЛОН 39(4)Т99 ВЫЧ ВЫДЕЛЕНО.
03 почасовая ШАБЛОН 39(3) ВЫЧ ВЫДЕЛЕНО.
03 имя ШАБЛОН Х(5).
Представление записи в памяти показано на рис. 9.
Чтобы выровнять данные «зарплата» и «почасовая», транслятор
вставляет два дополняющих байта внутри повторяющейся группы.
Однако при таком выравнивании второе повторение данного «таб-
лица» будет начинаться на один байт левее границы двойного слова,
87
Рис. 9. Дополняющие байты внутри повторяющейся группыз
D — граница двойного слова; F — граница слова; Н — граница половины слова; DB
дополняющие байты
и эти данные не будут выровнены правильно для еледующих повторе-
ний, поэтому транслятор вставляет^цополняющие байты в конце группы
следующим образом:
01 наряд.
02 шифр-работ.
02 таблица ПОВТОРЯЕТСЯ 10 РАЗ.
03 тип-p ШАБЛОН X.
[03 доп-байты ШАБЛОН XX.]
03 зарплата ШАБЛОН 39(4)Т99 ВЫЧ ВЫДЕЛЕНО.
03 почасовая ШАБЛОН 39(3) ВЫЧ ВЫДЕЛЕНО.
03 имя ШАБЛОН X (5).
[03 доп-байты-1 ШАБЛОН XX.|
Каждое следующее повторение данного «таблица» теперь начинает-
ся на один байт правее границы двойного слова. В памяти такая за-
пись будет представлена, как показано на рио. 10, т. е. каждое сле-
дующее повторение данного «таблица» будет теперь начинаться в той
же относительной позиции по отношению к границам слов, что и пер-
вое повторение.
d
II
41
'Is!
27
Первое повторение
данного „таблица"
Второе повторение
данного „ таблица ”
Пона-, Имя
совая'.
Рис. 10. Дополняющие байты между повторяющимися группами:
D — граница двойного слова; F — граница слова; H — граница половины слова; DB — до.
□олвяющне байты внутри группы; DB1— дополняющие байты между группами
88
Там, где вычислительные данные в фразой ВЫДЕЛЕНО следуют
за статьей, содержащей фразу ПОВТОРЯЕТСЯ в вариантом В ЗА-
ВИСИМОСТИ ОТ, дополняющие байты- добавляются на основе мак-
симального количества повторений поля. Если длина этого поля не
делится на т, требуемое для вычислительных данных, только некото-
рые значения имени-данного, которое определяет число повторений,
дадут правильное выравнивание вычислительных полей. Эго те зна-
чения, для которых длина поля, умноженная на количество повторе-
ний, плюс дополняющие байты, рассчитанные на основе максималь-
ного количества повторений, делится на т.
Пример.
01 поле-а.
02 поле-в ШАБЛОН 99.
02 поле-с ШАБЛОН X ПОВТОРЯЕТСЯ 20 ДО 99 РАЗ
В ЗАВИСИМОСТИ ОТ поле-в.
[02 доп-байты ШАБЛОН
02 поле-д ШАБЛОН 399 ВЫЧ ВЫДЕЛЕНО.
В этом примере только нечетные значения данного «поле-в» дадут
правильное .выравнивание данного «поле-д»
В следующем примере все значения данного «поле-в» дадут правиль-
ное выравнивание данного «поле-д».
Пример.
01 поле-а.
02 поле-в ШАБЛОН 999.
02 поле-с ШАБЛОН XX ПОВТОРЯЕТСЯ 20 ДО 99 РАЗ
В ЗАВИСИМОСТИОТ поле-в.
[02 доп-байты ШАБЛОН X.]
02 поле-д ШАБЛОН 399 ВЫЧ ВЫДЕЛЕНО.
Дополняющие байты между записями. Если файл содержит сгруп-
пированные в блоки логические записи, которые надо обработать в об-
ласти ввода-вывода, и какие-нибудь из этих записей содержат данные,
описанные с фразой ДЛЯ ВЫЧИСЛЕНИЙ, ДЛЯ ВЫЧИСЛЕНИЙ-1
или ДЛЯ ВЫЧИСЛЕНИЙ-2, программист должен обеспечить допол-
няющие байты между записями, необходимые для правильного вырав-
нивания. Количество этих байт определяется следующим образом.
Длины всех элементарных данных в записи складываются, включая
все дополняющие байты внутри записи, а для записей формата V до-
бавляются еще 4 байта для управляющего поля. Эта сумма делится
на самое большее т, необходимое для вычислительных элементарных
данных в записи.
Если остаток г равен нулю, дополняющие байты между записями
не требуются. Если г не равен нулю, требуется т — г дополняющих
байт. Эти дополняющие байты могут быть заданы с помощью данного
ЗАПОЛНИТЕЛЬ в конце записи.
Рассмотрим пример, который иллюстрирует метод подсчета коли-
чества дополняющих байт цак внутри записей, так н между записями.
89
Пример.
Пусть имеется запись:
01 группам-^.
02 al ШАБЛОН Х(5).
02 а2 ШАБЛОН Х(3)Г.
02 аЗ ШАБЛОН Х(3).
,02 в1 ШАБЛОН 39(4) ВЫЧ ВЫДЕЛЕНО.
02 в2 ШАБЛОН 39(5) ВЫЧ ВЫДЕЛЕНО.
02 вЗ ШАБЛОН 39(4) ВЫЧ ВЫДЕЛЕНО.
Представление этой записи в основной памяти показано на рис. 11.
Суммарный размер данных «аЬ, «а2» и «аЗ» равен И. Данное «в!» —
это вычислительное данное из 4 цифр. Оно должно быть выровнено
Рис. 11. Дополняющве байты между записями:
D — граница двойного слова; F — граница слова; Н — граница половины еаова;
DB — дополняющие байты внутри записи; DBI — дополняющие .байты между .запи-
сями
на границу, кратную 2, поэтому перед ним должен быть добавлен один
* дополняющий байт. С этим дополняющим байтом число байт, предшест-
вующих <в2», равно 14. Так как «в2» — вычислительное данное, имею-
щее размер 5 цифр и требующее выравнивания на границу, кратную
4, перед ним должны быть добавлены 2 дополняющих байта. Перед
«вЗ» дополняющие, байты не требуются. С этими дополняющими бай*
тами статья описания записи будет иметь вид:
01 групповая.
02. al ШАБЛОН Х(5).
02 а2 ШАБЛОН Х(3).
02 аЗ ШАБЛОН Х(3).
102 доп-байты ШАБЛОН X.]
02 в1 ШАБЛОН 39(4) ВЫЧ ВЫДЕЛЕНО.
[02 доп-байты-1 ШАБЛОН XX.J
02 в2 ШАБЛОН 39(5) ВЫЧ ВЫДЕЛЕНО.
02 вЗ ШАБЛОН 39(4) ВЫЧ ВЫДЕЛЕНО.
Размер записи равен 22 байтам, а наибольшее т равно 4, следова-
тельно, г = 2. Таким образом, чтобы достичь правильного выравнива-
ния группируемых в блок записей, программист должен добавить два
дополняющих байта между записями в конце записи.
" 90
Статья описания записи тогда будет иметь вид!
01 групповая.
02 al ШАБЛОН Х(5).
02 а2 ШАБЛОН Х(3).
02 аЗ ШАБЛОН Х(3).
[02 доп-байты ШАБЛОН X.]
02 в1 ШАБЛОН 39(4) ВЫЧ ВЫДЕЛЕНО.
[02 доп-байты-1 ШАБЛОН XX.]
02 в2 ШАБЛОН 39(5) ВЫЧ ВЫДЕЛЕНО.
02 вЗ ШАБЛОН 39(4) ВЫЧ ВЫДЕЛЕНО.
02-ЗАПОЛНИТЕЛЬ ШАБЛОН XX.
Данное ЗАПОЛНИТЕЛЬ описывает дополняющие байты между
ваписями, которые вставляются программистом.
4.3.7. Фраза СДВИНУТО ВПРАВО
Фраза СДВИНУТО ВПРАВО используется для изменения обычного
расположения данных внутри принимающего буквенного или буквен-
но-цифрового данного.
Формат:
СДВИНУТО ВПРАВО
Обычно внутри принимающего буквенного или буквенно-цифрово-
го поля данные устанавливаются, начиная с крайней левой позиции
поля. Неиспользуемые позиции справа заполняются пробелами. Если
посылаемое данное больше принимающего, усечение производится
справа.
Если принимающее данное описано с фразой СДВИНУТО ВПРАВО,
будет выполняться следующее:
а) если посылаемое данное больше принимающего, усекаться бу-
дут крайние левые литеры;
б) если посылаемое данное меньше принимающего, оно будет при-
жато к правому концу принимающего данного. Неиспользуемые по-
зиции слева будут заполнены пробелами
Фраза СДВИНУТО ВПРАВО может быть указана только для эле-
ментарных данных.
Пусть, например, имеются следующие описания данных:
02'а! ШАБЛОН Х(7).
02 а2 ШАБЛОН Х(7) СДВИНУТО ВПРАВО.
В результате выполнения оператора
ПОМЕСТИТЬ 'стол' В al. а2
данное «а!» будет содержать значение <СТОЛ-, —а данное а2 —
значение «.---- — СТОЛ».
91
4.3.8. Фраза ЗНАЧЕНИЕ
Фраза ЗНАЧЕНИЕ используется для определения начального
значения данного из секции рабочей памяти или значения, “связанного
с именем условия.
Формат 1:
(ЗНАЧЕНИЕ )
(ЗНАЧ---- ) литеРал
Формат 2;
(ЗНАЧЕНИЕ )
(ЗНАЧ-------^литерал-1 [ПО литерал-2][литерал-3 [ПО литерал-4][...
ЗНАЧ является сокращением слова ЗНАЧЕНИЕ.
Фраза ЗНАЧЕНИЕ не может быть указана для данного, размер ко-
торого является переменным.
Всюду, где в форматах указан литерал, может использоватьвя
стандартная константа.
В секции файлов и секции связи фраза ЗНАЧЕНИЕ должна ис-
пользоваться только в статьях имен условий. Во всех других статьях
этих секций фраза ЗНАЧЕНИЕ будет восприниматься как коммента-
рий. В секции рабочей памяти фраза ЗНАЧЕНИЕ может также ис-
пользоваться для задания начального значения любого данного. Дан-
ное принимает указанное значение во время загрузки рабочей про-
граммы. Если эта фраза не используется в описании данного, его на-
чальное значение не определено.
Фраза ЗНАЧЕНИЕ не должна использоваться в статье описания
данного наряду с фразой ПОВТОРЯЕТСЯ или в статье, подчиненной
действию этой фразы. Эго правило не распространяется на статьи
имен условий. В описании записи фраза ЗНАЧЕНИЕ не должна ис-
пользоваться в статье описания данного, следующей за статьей, со-
держащей фразу ПОВТОРЯЕТСЯ с вариантом В ЗАВИСИМОСТИ ОТ.
Не допускается использование фразы ЗНАЧЕНИЕ наряду с фра-
зой ПЕРЕОПРЕДЕЛЯЕТ или в статье, подчиненной действию этой
фразы. Это правило не распространяется на статьи имен условий.
Если фраза ЗНАЧЕНИЕ употреблена на уровне группового дан-
ного, литерал должен быть нечисловым литералом или стандартной
константой. Поле, отведенное для этого данного, заполняется без уче-
та использования отдельных данных, входящих в эту группу. В этой
группе на подчиненных уровнях не может быть указана фраза
ЗНАЧЕНИЕ.
Фразу ЗНАЧЕНИЕ не следует использовать для группового
данного, элементарные данные которого содержат в своих описаниях
фразы СДВИНУТО ВПРАВО, ВЫДЕЛЕНО и,фразу об использова-
нии (кроме варианта ДЛЯ ВЫДАЧИ). Эту фразу нельзя указывать
для внешних данных с плавающей точкой.
Литералы во фразе ЗНАЧЕНИЕ должны определяться в соответст-
вии со следующими правилами;
92
а) еели данное числовое, вве литералы во фразе ЗНАЧЕНИЕ
должны быть числовыми. Еели литерал определяет значение данного
из секции рабочей памяти, он засылается по правилам числовых пере-
сылок, н его значение не должно требовать уеечения ненулевых цифр;
б) еели данное буквенное или буквенно-цифровое,все литералы во
фразе ЗНАЧЕНИЕ должны быть нечиеловыми. Они засылаются в
соответствии в правилами установки в буквенно-цифровом поле. Раз-
мер литерала не должен превышать размера данного;
в) все числовые литералы во фразе ЗНАЧЕНИЕ должны принад-
лежать диапазону значений, указанному фразой ШАБЛОН в описа-
нии данного. Например, для шаблона 99МММ литерал должен нахо-
диться в диапазоне от 1000 до 99000 или быть нулем. Для шаблона
МММ99 литерал должен быть внутри диапазона от .00000 до .00099;
г) если шаблон содержит литеры редактирования, то их функции
при установлении начального значения игнорируются.
Формат 2 фразы ЗНАЧЕНИЕ используется только в описании име-
ни условия. Shin формат связывает одно значение, несколько значений
или диапазон значений в именем условия. В статье имени условия фра-
за ЗНАЧЕНИЕ обязательна и является единственной фразой, допусти-
мой в этой статье.
Вариант ПО используется для присваивания имени условия диа-
пазона значений. В этом варианте литерал-1 должен быть меньше лите-
рала-2, литерал-3 меньше литерала-4 и т. д.
Если литералы нечисловые, то диапазон значений должен быть
указан в соответствии с фразой ПРОГРАММНЫЙ АЛФАВИТ разде-
ла оборудования. Если фраза ПРОГРАММНЫЙ АЛФАВИТ не ука-
зана или во фразе ПРОГРАММНЫЙ АЛФАВИТ указано имя алфа-
вита, которое именует внутреннюю основную последовательность ко-
дов (вариант ВНУТРЕННИЙ), то для указания диапазона значений
следует пользоваться последовательностью кодов ДКОИ. Если во
фразе ПРОГРАММНЫЙ АЛФАВИТ указано имя алфавита, которое
именует специальную основную последовательность кодов (вариант
СПЕЦИАЛЬНЫЙ), то для указания диапазона значений следует ис-
пользовать последовательность кодов, указанную в п. 3.1.3. Тип ли-
терала в статье имени-условия должен быть совместим в типом услов-
ной переменной.
Каждое имя-условия может быть уточнено именем-данного, к кото-
рому оно относится (именем условной переменной), и его уточнителя-
ми. Если имя-условия относится к условной переменной, требующей
индексирования, то при обращении к нему в разделе процедур оно
должно индексироваться по тем же правилам, что и имя усдовной пере-'
менной.
Имя-условия может быть связано в любым элементарным или груп-
повым данным, кроме следующих:
а) данного с уровнем 66;
б) группы, содержащей данные, описания которых включают фра-
вы СДВИНУТО ВПРАВО, ВЫДЕЛЕНО или вариант фразы об ис-
пользовании, отличный от ДЛЯ ВЫДАЧИ.
в) индексного данного.
93
4.3.9. Фраза ПЕРЕОПРЕДЕЛЯЕТ
Фраза ПЕРЕОПРЕДЕЛЯЕТ указывает транслятору, что различ-
ные данные должны храниться в одной и той же области основной па-
мяти, или обеспечивает другое группирование или описание одних
и тех же данных. Фраза ПЕРЕОПРЕДЕЛЯЕТ указывает изменение
определения (переопределение) области памяти, но не значений дан-
ных, занимающих эту область.
Формат:
номер-уровня имя-данного-1 ПЕРЕОПРЕДЕЛЯЕТ имя-данного-2
Номера уровней имени-данного-1 и имени-данного-2 должны сов-
падать и не могут быть 66 или 88.
Имя-данного-2 есть имя переопределяемого данного (или области)
и связано с предыдущей статьей описания данного.
Имя-данного-1 есть имя переопределяющего данного и является
другим именем той же области памяти.
В статье описания данного фраза ПЕРЕОПРЕДЕЛЯЕТ долж-
на быть первой фразой, следующей за именем-данного-1. Фраза
ПЕРЕОПРЕДЕЛЯЕТ не должна применяться на уровне 01 в секции
файлов. Если более одной статьи е уровнем 01 следует за статьей опи-
сания файла, неявное переопределение обеспечивается автоматически.
Переопределение начинается с имени-данного-2 и заканчивается,
когда встречается номер уровня, равный номеру уровня имени-дан-
ного-2. Между описаниями переопределяемого и переопределяющего
данных не может быть статей, имеющих номера уровней, численно
меньшие, чем номер уровня имени-данного 1 и имени данного-2.
Пример.
02 а.
03 al ШАБЛОН X.
03 а2 ШАБЛОН 99.
03 аЗ ШАБЛОН XXX.
02 д ПЕРЕОПРЕДЕЛЯЕТ а ШАБЛОН Х(6).
В этом примере «д» есть имя-данного-1, а «а» есть имя данного-2.
Переопределение распространяется на все данные, подчиненные «а»:
al, а2, аЗ.
Статья описания имени-данного-2 не должна содержать фразу
ПОВТОРЯЕТСЯ и не может быть подчинена статье, которая содер-
жит фразу ПОВТОРЯЕТСЯ. Данные, входящие в состав переопреде-
ляемого поля, могут быть описаны с фразой ПОВТОРЯЕТСЯ, но без
варианта В ЗАВИСИМОСТИ ОТ. Имя-данного-1 и любое данное, под-
чиненное ему, могут содержать в описании фразу ПОВТОРЯЕТСЯ
без варианта В ЗАВИСИМОСТИ ОТ.
Когда имя-даиного-1 имеет номер уровня, отличный от 01, размеры
переопределяемого и переопределяющего данных должны совпадать.
Однако транслятор допускает, чтобы размер переопределяющего дан-
ного был меньше, чем размер переопределяемого данного.
94
Если имя-данного-1 описано в фразой ПОВТОРЯЕТСЯ, размер дан-
ного считается равным произведению длины одного повторения на
число повторений.
О правилах использования фразы ПЕРЕОПРЕДЕЛЯЕТ вместе
с фразой ВЫДЕЛЕНО в статье описания данного см. п. 4.3.6.
Статьи, описывающие переопределяющее поле, не должны содер-
жать фразу ЗНАЧЕНИЕ. Исключение составляют статьи имен усло-
вий, в которых фраза ЗНАЧЕНИЕ может использоваться.
Статьи описания переопределяющего данного должны следовать за
статьями описания переопределяемой области без промежуточных
статей между ними, определяющих новые области памяти. Многократ-
ные переопределения одной и той же области памяти должны исполь-
вовать имя-данного статьи, которая первоначально определяла эту
область. При многократном переопределении транслятор будет
воспринимать как правильное и имя-данного предыдущей статьи. Оба
следующих примера показывают допустимое применение фразы ПЕРЕ-
ОПРЕДЕЛЯЕТ.
Пример 1.
02 строка ШАБЛОН 9(4).
02 строка-1 ПЕРЕОПРЕДЕЛЯЕТ строга ШАБЛОН 9Т999.
02 строка-2 ПЕРЕОПРЕДЕЛЯЕТ строка ШАБЛОН 99Т99.
Пример 2.
02 шифр ШАБЛОН 9(4).
02 шифр-1 ПЕРЕОПРЕДЕЛЯЕТ шифр ШАБЛОН ХХ99.
02 шифр-2 ПЕРЕОПРЕДЕЛЯЕТ шифр-1 ШАБЛОН Х(4).
Данные внутри области могут быть переопределены без изменения
их размеров. Следующее ниже описание приведет к распределению па-
мяти, показанному на рис. 12.
02 строка-2.
03 оклад ШАБЛОН XXX.
03 шифр-работ ШАБЛОН Х(9).
03 месяц ШАБЛОН XX.
02 строка-1 ПЕРЕОПРЕДЕЛЯЕТ строка-2.
03 зарплата ШАБЛОН XXX.
03 таб-номер ШАБЛОН Х(9).
03 год ШАБЛОН XX.
Ст рока-1
Зарплата Таб-номер Год
Рис. 12. Перераспределение области
без изменения размеров данных
да
При переопределении данные внутри области могут быть реорга-
низованы. Следующее описание приводит к распределению памяти,
показанному на рис. 13,
02 строка-2.
03 оклад Ш XXX.
03 шифр-работ Ш Х(9).
03 месяц Ш XX.
02 строка-1 ПЕРЕОПРЕДЕЛЯЕТ строка-2.
03 таб-номер Ш Х(6).
03 зарплата Ш 999Т999.
03 год Ш Х&.
Рис. 13. Перераспределение области
с реорганизацией входящих в нее данных
Когда область переопределяется, действительны все описания этой
области. Так, если «в1» и «с 1> - два отдельных данных, которые
определяют одну и ту же область памяти в результате переопределе-
ния, операторы ПОМЕСТИТЬ а В в1 или ПОМЕСТИТЬ д В с 1 мо-
гут быть выполнены в любой точке программы. В первом елучае об-
ласть будет иметь значение данного «а» и форму, указанную описанием
данного «вЬ. Во втором елучае та же физическая область получит зна-
чение данного «д» и форму в соответствии в описанием данного «с1».
Если оба эти оператора будут выполняться друг за другом в указан-
ном порядке, то сохранено будет последнее пересылаемое значение,
т. е. значение данного «д». Переопределение само по себе не вызывает
стирания никаких значений и не отвергает предыдущее описание.
Пересылка переопределяемого данного в переопределяющее и на-
оборот может дать непредвиденные результаты.
Если использование переопределяющего данного отлично от ис-
пользования переопределяемого данного, никакого изменения значе-
ния в соответствии с использованием из-за переопределения не проис-
ходит.
Пример.
02 в1 ШАБЛОН 99 ДЛЯ ВЫДАЧИ ЗНАЧ 8.
02 с! ПЕРЕОПРЕДЕЛЯЕТ в1 ШАБЛОН 399 ДЛЯ ВЫЧИСЛЕНИЙ.
02 al ШАБЛОН 39(4) ДЛЯ ВЫЧИСЛЕНИЙ.
96
Предположим, что данное «в!» начинается на границе половины
слова. Битовая комбинация его значения равна 1111 0000 1111 1000,
так как это данное имеет использование ДЛЯ ВЫДАЧИ. Переопре-
деление в1 не изменяет его значения, однако результаты выполнения
операторов СЛОЖИТЬ в1 С al и СЛОЖИТЬ cl С al будут различ-
ными. В первом случае к al прибавляется значение 8, так как в1—
внешнее десятичное данное. В последнем случае к al прибавляется
значение — 3848, так как cl — двоичное данное.
Фраза ПЕРЕОПРЕДЕЛЯЕТ может быть указана для данного, под-
чиненного как переопределяемому, так и переопределяющему данному.
4.3.10. Фраза ПЕРЕИМЕНОВЫВАЕТ ’
Фраза ПЕРЕИМЕНОВЫВАЕТ служит для переименования групп
элементарных данных в записи.
Формат:
66 имя-данного-1 ПЕРЕИМЕНОВЫВАЕТ имя-данного 2 [ПО имя-данного-3].
Для логической записи может быть написана одна или более ста-
тей ПЕРЕИМЕНОВЫВАЕТ. Все статьи ПЕРЕИМЕНОВЫВАЕТ,
связанные с данной логической записью, должны следовать непосред-
ственно за последней статьей описания данных в записи.
Имя-данного-2 и имя-данного-3 должны быть именами элементар-
ных или групповых данных в соответствующей логической записи и не
могут быть одним и тем же именем. Имя-даниого-3 не может быть под-
чиненным имени-данного-2.
Когда имя-данного-3 не указано, имя-данного-1 считается груп-
повым, если имя-данного-2 — групповое данное, и элементарным, ес-
ли имя-данного-2 — элементарное данное.
Если имя-данного-3 указано, имя-данного-1 является групповым
данным, которое включает все элементарные данные, начиная с имени-
данного-2 (если оно является элементарным) или первого элементар-
ного данного внутри имени-данного-2 (если оно является групповым)
и кончая именем-данного-3 (если оно является элементарным) или по-
следним элементарным данным внутри имени-данного-3 (если оно яв-
ляется групповым).
Статья с уровнем 66 .не может переименовывать другую статью
в уровнем 66, а также статьи с номерами уровней 77, 88, 01.
Имя-данного-1 не может использоваться в качестве уточнителя.
Само оно может быть уточнено только именем записи или именем фай-
ла. Имя-данного-2 и имя-данного-3 могут быть уточнены.
Ни имя-данного-2, ни имя-данного-3 не может содержать в описа-
нии фразу ПОВТОРЯЕТСЯ или подчиняться действию этой фразы.
Имя-данного-2 в описании записи должно предшествовать имени-
данного-3. Более того, начальная точка области, описываемой именем-
данного-3, должна логически следовать за начальной точкой области,
описываемой именем-данного-2.
Например, в следующем описании записи первая фраза ПЕРЕИМЕ-
НОВЫВАЕТ неправильна, а вторая правильна. ч
4 Зак. 73 97
01 запись-ав.
02 групла-а.
03 поле-la.
04 пункт-!а Ш XX.
04 пуакт-2а Ш XXX.
04 пункт-За III XX.
03 поле-2а.
04 пункт-4а ИГ XX.
04 пункт-5а Ш XX.
04 пункт-ба Ш XX.
02 группа-в ПЕРЕОПРЕДЕЛЯЕТ группа-а. >
03 поле-1в.
04 пункт-!в 1П Х(4).
04 пункт-2в Ш XXX.
03 поле-2в.
04 пункт-Зв Ш XXX.
04 пункт-4в Ш XXX.
66 запись-а ПЕРЕИМЕНОВЫВАЕТ пункт-За ПО пункт-2в.
66 запись-в ПЕРЕИМЕНОВЫВАЕТ пункт-2а ПО пункт-Зв.
Хотя в описании записи данное «пункт-За» предшествует дан-
ному «пункт-2в», в памяти данное «пункт-2в» предшествует данному
«пункт-За» (рис. 14). Поэтому в этом примере применение первой фра-
Пункт-1а , Пункт- 2а Пункт-5а
+—-4----F
f
Пункт- //
I
ь
Пункт-24
Пуннт~4а Пункт-5а ; Пуннт-Sa
----1>--|——I--------ь——
Пункт-54 Пункт-44
---------- ЗаНусь- 5 ------------»4
Рис. 14. Размещение данных записи в основное намят»
вы ПЕРЕИМЕНОВЫВАЕТ неправильно. Вторая фраза ПЕРЕИМЕ-
НОВЫВАЕТ правильна, так как данное «пункт-2а» предшествует
данному «пункт-Зв» как в описании, так и в основной памяти.
5. РАЗДЕЛ ПРОЦЕДУР.
5.1. АРИФМЕТИЧЕСКИЕ ОПЕРАТОРЫ
5.1.1. Назначение и форматы
Отдельные арифметические операции (сложение, вычитание, ум.
ножение и деление) можно выполнить операторами СЛОЖИТЬ,
ОТНЯТЬ, УМНОЖИТЬ и РАЗДЕЛИТЬ. В операторе ВЫЧИСЛИТЬ
эти операции и операция возведения в степень могут быть объединены
в формулу.
98
Оператор СЛОЖИТЬ используется для сложения двух или более
числовых данных или литералов. Имеются три формата оператора
СЛОЖИТЬ.
Формат 1:
СЛОЖИТЬ .
С_идентифик^тор-т [ОКРУГЛЯЯ] [идентификатор-n [ОКРУГЛЯЯ]]...
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
Формат 2:
гппжитк [идентификатор-!! [идентификатор-21 Гидентификатор-З]
----—----- [литерал-1 J [литерал-2 J [литерал-3 J * * '
ПОЛУЧАЯ идентификатор-m [ОКРУГЛЯЯ]________
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
Формат 3;
1СООТВ )
СЛОЖИТЬ [СООТВГТСТВ[-1Ц10 |’идентификатор ! С идеитификатор-2
[ОКРУГЛЯЯ] ШРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
В формате ! значения операндов, предшествующих слову С, скла-
дываются и сумма добавляется к текущему значению идентификатора-т
(идентификатора-n и т. д.). Результат запоминается в идентифика-
торе-m (идентификаторе-п и т. д.).
В формате 2 (в фразой ПОЛУЧАЯ) слову ПОЛУЧАЯ должно
предшествовать не менее двух операндов. Значения этих операндов
складываются, а сумма запоминается в качестве нового значения иден-
тификатора-т.
В формате 3 (в фразой СООТВЕТСТВЕННО) идентификатор !
и идентификатор-2 должны быть групповыми данными. Элементарные
данные идентификатора-! складываются с соответствующими данными
идентификатора-2 и сумма запоминается в последних.
* Пояснения фраз ОКРУГЛЯЯ, ПРИ ПЕРЕПОЛНЕНИИ и СООТ-
ВЕТСТВЕННО в применении к арифметическим операторам см. в
и. 5.1.2—5.1.4.
Опфатор ОТНЯТЬ используется для вычитания одного или сум-
мы двух или более числовых данных или литералов из другого данного
(других данных) или литерала. Имеются три формата оператора
ОТНЯТЬ.
Формат 1:
ОТНЯТЬ рВДентиФикат0Р‘1} рдентификатор-Zj
ОТ идентифнкатор-m [ОКРУГЛЯЯ] [идентификатор-n [ОКРУГЛЯЯ]]...
ШРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
4*
99
Формат 2:
гугыати (идентификатор-В Гидентифи1а?ор-21
uihhid |Литерал-1 ) [литерал-2 J * * *
ОТ |идеитификатор-т| ПОЛУЧАЯ идентификатор-» [ОКРУГЛЯЯ]
— (литерал-m J -------------- т г [--------------------J
[ПРИ ПЕРЕПОЛНЕНИИ повелительный оператор]
Формат 3:
(СООТВ ]
ОТНЯТЬ } идентификатор-! _
——------ (СООТВЕТСТВЕННО |
ОТ идентификатор-2 [ОКРУГЛЯЯЦПРИ ПЕРЕПОЛНЕНИИ
повелительный-оператор]
В формате 1 все операнды, предшествующие слову ОТ, вкладывают-
ся, и эта сумма вычитается из идентификаТора-т, идентификатора-^
(если он указан) и т. д. Результат вычитания запоминается как новое
значение идентификатора-m,. идентификатора-п и т. д.
В формате 2 все операнды, предшествующие слову ОТ, складывают-
ся и эта сумма вычитается из литерала-m или идентификатора-т.
Результат вычитания запоминается в идентйфикаторе-п.
В формате 3 элементарные данные идентификатора-! вычитаются
из соответствующих элементарных данных идентификатора-2 и раз-
ность запоминается в последних. Идентификатор-! и идентификатор-2
должны быть групповыми данными.
Оператор РАЗДЕЛИТЬ используется для нахождения частного
и остатка от деления одного числового данного или литерала на
другое.
Формат:
РАЗДЕЛИТЬ НА {«“ДЙ"™’-2}
ПОЛУЧАЯ идентификатор-3 [ОКРУГЛЯЯ]
(ОСТАТОК ндеитнфикатор-4] [ПРИ ПЕРЕПОЛНЕНИИ
вовелительный-оператор]
Значение идентификатора-! (или литерала-1) делится на значение
идентификатора-2 (или литерала-2), частное запоминается в идентифи-
каторе-3, а остаток, если указана фраза ОСТАТОК, — в идентифи-
каторе-4.
Остаток определяется как результат вычитания произведения ча-
стного и делителя из делимого. Если указана фраза ОСТАТОК, ни
один из идентификаторов не может относиться к данным в плавающей
точкой. Если указана также фраза ОКРУГЛЯЯ, частное округляется
после определения остатка.
Оператор УМНОЖИТЬ используется для умножения одного чиа-
лового данного или литерала на другое. Имеются два формата опера-
тора УМНОЖИТЬ.
100
Формат 1:
УМНОЖИТЬ {литералТаТ0Р1} НА идентифшсатор-2 {ОКРУГЛЯЯ!
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
Формат 2s
умножить {Х7рЙ“’т0,,''( ™ KES"”’ 2}
ПОЛУЧАЯ идентификатор-3 [ОКРУГЛЯЯ!
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
В формате 1 значение идентификатора-1 (или литерал-1) умножа-
ется на значение идентификатора-2. Произведение запоминается в иден-
тификаторе^.
В формате 2 значение идентификатора-1 (или литерал-1) умножает-
ея на значение идентификатора-2 (или литерал-2), а произведение за-
поминается в идентификаторе-3.
Оператор ВЫЧИСЛИТЬ присваивает данному значение другого
данного, литерала или арифметического выражения.
Формат:
ВЫЧИСЛИТЬ идентификатор-1
{идентификатор-2 )
литерал >
арифметическое-выражение J
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
Арифметическое-выражение — это комбинация идентификаторов,'
Чкаловых элементарных данных и числовых литералов, соединенных
знаками арифметических операций. Кроме того, для указания порядка
вычисления элементов в арифметическом выражении могут использо-
ваться круглые скобки, если это необходимо.
Любому арифметическому выражению может предшествовать знак
одноместной арифметической операции (+ или —).
В арифметических выражениях могут применяться пять знаков
арифметических операций: +, —,*,/>**, которые представляют со-
ответственно сложение, вычитание, умножение, деления и возведение
в степень. Каждый знак арифметической операции должен быть выделен
пробелами в двух сторон. Если знак одноместной арифметической
операции следует за левой круглой скобкой, перед ним не должно
быть пробела. Разрешается опускать пробел, следующий за знаком
одноместной арифметической операции. Знак умножения никогда не
должен опускаться.
Выражения внутри круглых скобок вычисляются первыми. Когда
выражения являются вложенными; вычисление происходит от наибо-
лее вложенных к менее вложенным выражениям.
Если круглые скобки не используются или заключенные в скобки
выражения находятся на одинаковом уровне вложенности, подразу-
мевается следующий иерархический порядок: одноместные операции
сложения и вычитания, возведение в степень, умножение и деление,
101
двухместные операции сложения и вычитания. Когда порядок после-
довательных операций на одном иерархическом уровне определяется
скобками неполно, операции выполняются слева направо.
Арифметическое выражение может начинаться только елевой круг-
лой скобки, знака одноместной арифметической операции + или —,
идентификатора или литерала и заканчиваться только правой круг-
лой скобкой, идентификатором или литералом,.
Между левыми и правыми скобками арифметического выражения
должно быть взаимно-однозначное соответствие.
В результате выполнения оператора ВЫЧИСЛИТЬ идентифика-
тору-! присваивается значение идентификатора-2, литерала или ариф-
метического выражения, вычисленного по изложенным выше прави-
лам!.
Во всех арифметических операторах каждый идентификатор дол-
жен относиться к числовому элементарному данному, исключая сле-
дующее:
а) идентификатор, следующий за словом ПОЛУЧАЯ вли находя-
ща йся слева от знака г=> в операторе В Ы ЧИСЛИТЬ, может относиться
к числовому редактируемому данному, если он сам не является опе-
рандом арифметической операции;
б) идентификаторы в операторе СЛОЖИТЬ или ОТНЯТЬ с фразой
СООТВЕТСТВЕННО должны относиться к групповым данным.
Все литералы должны быть числовыми.
Максимальный размер каждого операнда, а также результата вы-
числений после его выравнивания в соответствии с положением деся-
тичной точки в результирующем идентификаторе равен 18 цифрам.
5.1.2. Фраза ОКРУГЛЯЯ
После выравнивания десятичной точки количество цифр в дробной
части результата арифметической операции сравнивается с количест-
вом позиций, предусмотренных для дробной части фразой ШАБЛОН
результирующего идентификатора. Если количества цифр дробной
части результата превышает количество позиций для их хранения, оп-
ределенных фразой ШАБЛОН, происходит усечение лишних цифр спра-
ва. При этом, если используется фраза ОКРУГЛЯЯ, самая младшая
значащая цифра, определенная строкой литер шаблона результирую-
щего идентификатора, округляется, т. е. увеличивается на 1, если
старшая из отбрасываемых цифр больше или равна 5.
5.1.3. Фраза ПРИ ПЕРЕПОЛНЕНИИ
После выравнивания десятичной точки значение вычисленного
результата может превысить наибольшее значений, которое может
храниться в поле результирующего ‘идентификатора, т. е. возникает
условие переполнения. Условие переполнения и действия при возник-
новении его определяются фразой ПРИ ПЕРЕПОЛНЕНИИ. Если фра-
за ПРИ ПЕРЕПОЛНЕНИИ не указана, а условие переполнения имеет
место, значение результирующего идентификатора может оказаться
102
непредвиденным. Если указан афраза ПРИ ПЕРЕПОЛНЕНИИ и имеет
место условие переполнения, выяолняется повелительный оператор,
определенный форматом фразы, а поде результата сохраняет прежнее
значение. Если же фраза ПРИ ПЕРЕПОЛНЕНИИ употреблена, а ус-
ловия переполнения не возникло, будет выполняться следующее пред-
ложение, а результат вычисления будет помещен в поле результата.
Деление на нуль всегда вызывает условие переполнения.
Проверка условия переполнения распространяется только на ко-
нечный результат арифметической операции и не распространяется на
промежуточные результаты. Если указана и фраза ПРИ ПЕРЕПОЛНЕ-
НИИ, и фраза ОКРУГЛЯЯ, то округление выполняется перед про-
веркой условия переполнения.
Пусть, например, требуется вычислить а — бфг н пусть шаблон
«а» есть 99189, а значения данных до вычисления следующие: а —
= Щд45, б = 30д64, г = 75 ,д 82.
Результат вычисления 106л46. Так как шаблон «а» есть 99Т99,, то
имеет место условие переполнения.Если для вычисления «а» в ариф-
метическом операторе фраза ПРИ ПЕРЕПОЛНЕНИИ не будет указа-
на, то значение «а» непредсказуемо, если же она будет указана, то зна-
чение «а» будет прежнее (80 д 45). Для того чтобы переполнение не воз-
никло, следует определить шаблон как 999Т99.
5.1.4. Фраза СООТВЕТСТВЕННО
Фраза СООТВЕТСТВЕННО позволяет производить действия над
элементарными данными с одинаковыми именами, принадлежащими к
групповым данным, идентификаторы которых являются операндами
в арифметическом операторе. Слово СООТВЕТСТВ ЕННО может быть
сокращено до СООТВ.
Назовем для краткости идентификаторы групповых данных, сле-
дующие в операторе за словом СООТВЕТСТВЕННО, С1 и С2. Эле-
ментарные данные двух групповых данных считаются соответствую-
щими и, следовательно, участвуют в операции только тогда, когда они
имеют одинаковые имена и все уточнители вплоть до Ci и С2, но не
включая их. Непоименованные данные (т. е. данные ЗАПОЛНИТЕЛЬ),
входящие в С1 и С2, не считаются соответствующими.
Пример.
01 запись-главн. 01 запись-корректур.
02 свед-о-детали. 02 свед-о-детали.
03 шифр Ш Х(!0). (53 шифр-детвли Ш Х(ГО).
03 всего Ш 9(5). 03 всего Ш 9 (5).
ОЗ стоим Ш 999Т99. ОЗ стоим П1 999Т99.
02 лимит.. ' 02 коррект-лимита.
03 колич 1П 39(4). 03 колич Ш 39(4).
В результате выполнения оператора СЛОЖИТЬ СООТВЕТСТВЕН-
НО запись-главн. С запись-корректур действия будут производиться
только надданными «всего» и «стоим». Данные «колич» не будут участ-
вовать в операции, так как они имеют разные уточнители.
103
Cl и С2 не могут быть данными с номером уровня 66, 77 или! 88;
ни одно из них не может быть индексным данным. Ни G1, ни С2 немо»
гут быть названы словом ЗАПОЛНИТЕЛЬ. J
Если в Cl или С2 входят данные, описанные с фразой ПЕРЕОПРЕ-
ДЕЛЯЕТ, ПОВТОРЯЕТСЯ или ДЛЯ ИНДЕКСА, эти данные, а так»
же элементарные данные, содержащиеся в них, игнорируются. Одна-
ко сами С1 и С2 могут быть описаны с фразами ПЕРЕОПРЕДЕЛЯЕТ
или ПОВТОРЯЕТСЯ или входить в данное, описанное в этими фраза-
ми. С1 и С2 могут быть подчинены данному, названному фразой ЗА-
ПОЛНИТЕЛЬ.
Соответствующие элементарные данные должны быть числовыми.
Если в сочетании о фразой СООТВЕТСТВЕННО используется
фраза ПРИ ПЕРЕПОЛНЕНИИ, проверка условия переполнения про-
изводится только после завершения всех операций СЛОЖИТЬ или
ОТНЯТЬ. Если для какой-нибудь из этих операций возникло пере-
полнение, поле результата для этого сложения не изменяется и вы-
полняется повелительный оператор, указанный во фразе ПРИ'ПЕРЕ-
ПОЛНЕНИИ.
[5.2. ОПЕРАТОРЫ УПРАВЛЕНИЯ ПОСЛЕДОВАТЕЛЬНОСТЬЮ
ВЫПОЛНЕНИЯ ПРОЦЕДУР
Обычно операторы раздела процедур выполняются в той последо-
вательности, в какой они написаны в программе. Операторы управле-
ния последовательностью выполнения процедур позволяют изменить
эту последовательность. Здесь описываются все повелительные опера-
торы управления последовательностью (ПЕРЕЙТИ, ИЗМЕНИТЬ,
ВЫПОЛНИТЬ, ОСТАНОВИТЬ, ВЫЙТИ) и условный оператор
ЕСЛИ.
5.2.1. Оператор ПЕРЕЙТИ
Оператор ПЕРЕЙТИ позволяет перейти нз одной части программы
в другую. Имеются 2 формата оператора ПЕРЕЙТИ.
Формат 1:
ПЕРЕЙТИ К [имя-процедуры-1]
Формат 2:
ПЕРЕЙТИ К имя-процедуры-1 [имя-процедуры-2]...
имя-процедуры-л В ЗАВИСИМОСТИ ОТ идентификатор
Если оператор ПЕРЕЙТИ появляется в повелительном предложе-
нии, он должен быть единственным или последним оператором в по-
следовательности повелительных операторов.
Формат 1 вызывает передачу управления имени-процедуры-1 илн '
другому имени процедуры, если оператор ПЕРЕЙТИ был изменен опе-
ратором ИЗМЕНИТЬ. В последнем случае оператору ПЕРЕЙТИ дол-
жно предшествовать имя параграфа и он должен быть единственным
оператором в этом параграфе.
104
Если в формате 1 имя-процедуры-1 не определено, оператор ПЕ-
РЕЙТИ должен быть подвергнут действию оператора ИЗМЕНИТЬ
(см. п.5.2.2) прежде, чем он начнет выполняться. Оператор ПЕРЕЙТИ
должен следовать непосредственно за именем параграфа и должен быль
единственным в этом параграфе.
Формат 2 вызывает передачу управления той нз названных в спис-
ке процедур, порядковый номер которой равен значению идентифика-
тора. Для того чтобы оператор ПЕРЕЙТИ выполнялся, значение иден-
тификатора должно быть положительным целым в диапазоне от 1 до п,
где п — номер последней указанной в списке процедуры, Допускается
п €$ 2031. Если значение идентификатора не попадает в диапазон от
1 до п, оператор ПЕРЕЙТИ игнорируется.
Идентификатор должен относиться к элементарному числовому
данному, описанному без точки. Его шаблон не должен содержать бо-
лее четырех цифр. Использование его может быть ДЛЯ ВЫДАЧИ,
ДЛЯ ВЫЧИСЛЕНИЙ или ДЛЯ ВЫЧИСЛЕНИЙ-3.
Пример. -
ПЕРЕЙТИ К проверка-2, проверка-5, проверка-7 В ЗАВИСИМОСТИ ФТ
переключатель.
Если значение идентификатора «переключатель» к моменту выпол-
нения оператора ПЕРЕЙТИ равно 2, то произойдет передача управ-
ления процедуре «проверка-5».
5.2.2. Оператор ИЗМЕНИТЬ
Оператор ИЗМЕНИТЬ используется для изменения точки переда-
чи управления, указанной в операторе ПЕРЕЙТИ, или определения
точки передачи управления, если она не указана в операторе ПЕРЕЙ-
ТИ.
Формат:
ИЗМЕНИТЬ имя-процедуры-1 (ДЛЯ ПЕРЕХОДА] К имя-процедуры-2
[имя-процедуры-3 ШЛЯ ПЕРЕХОДА) К_ имя-процедуры-4] ...
V
> Имя-процедуры-1, имя-процедуры-3 и т. д. должны быть именами
параграфов, которые содержат только одно предложение, состоящее
из оператора ПЕРЕЙТИ формата 1. Имя-процедуры-2, имя-процеду-
ры-4 и т. д. должны быть именами параграфов или секций раздела про-
цедур.
Действие оператора ИЗМЕНИТЬ заключается в замене имен-про-
цедур, указанных в операторах ПЕРЕЙТИ, именем-процедуры-2, име-
нем-процедурЫ-4 и т. д, оператора ИЗМЕНИТЬ. Если имя-процедуры
не было указано в операторе ПЕРЕЙТИ, оператор ИЗМЕНИТЬ поз-
воляет ввести в такой оператор имя-процедуры-2 (имя-процедуры-4
и т. д.). Имя-процедуры-1, имя-процедуры-3 и т. д. есть имена Пара-
графов, содержащих операторы ПЕРЕЙТИ, подлежащие изменению.
юз
Пример
счет-1. ПЕРЕЙТИ К -стет-2.
стет-3. ...
счет-2. ИЗМЕНИТЬ счет-Д ДЛЯ ПЕРЕХОДА К счет-2а. ...
счет-2а... 1
При нервом выполнении оператора ПЕРЕЙТИ управление пере-
дается процедуре «счет-2». Если после выполнения оператора ИЗМЕ-
НИТЬ управление достигает оператора ПЕРЕЙТИ, произойдет пе-
редача управления процедуре «счет-2а».
5.'2.3. Оператор ВЫПОЛНИТЬ
Оператор ВЫПОЛНИТЬ обеспечивает -временное отклонение от
обычной последовательности выполнения процедур, чтобы выполнить
один или несколько операторов указанное количество раз или до тех
пор, пока не станет истинным некоторое условие. Повле выполнения
этих операторов управление возвращается к оператору, следующему
за оператором ВЫПОЛНИТЬ. Имеются 4 формата оператора ВЫПОЛ-
НИТЬ.
Формат 1:
ВЬЫЮЛ Ы'И № ммя-врвмк®даи-1 [ПО л*еи-п₽в>цедуры-2]
Формат 2:
ВЫПОЛНИТЬ им я-процедуры-1 [ПО имя-процедуры-2]
{РАЗ
РАЗА
Формат <3:
ВЫПОЛНИТЬ етвя-'процедурш-Т [ПО 'имя-процедуры-2] ДО условие-!
Формат 4:
ВЫПОЛНИТЬ имя-процедуры-1 [ПО имя-процедуры-2]
МЕНЯЯ {имя-индекса-1 . | ОТ {литералТ**2
(идентификатор-! I [идентификатор-2
«А в^катор-з} условие-1 (
(ЗАТЕМ /имяншсдекса-Й 1 от 1
(ЗАТЕМ [идентификатор-!/ 2L (S^Iop.5]
“A tSJ^erop-'e} Ж» условней <
(чгяя-кппюгп* 7 -I &1мя-иидекса-8 }
е™? . ei Esi* J
ir— г а ТИДенТИфВБШГОр-О j
НА KSSLm-U доу™е-ад
106
Каждое имя-процедуры должно быть именем секции или парагра-
фа раздела процедур.
Каждый идентификатор должен относиться к числовому элементар-
ному данному, В формате 2 и формате 4 (>с фразой ЗАТЕМ} каждый
идентификатор должен быть описан как. целое. Однако транслятор
допускает, чтобы- в формате 4 идентификатор относился к данному,
описанному с десятичной точкой.
Вее литералы должны быть числовыми.
При выполнении оператора ВЫПОЛНИТЬ управление, передается
первому оператору процедуры, указанной именем-процедуры-!. Уп-
равление всегда возвращается оператору, следующему аа оператором
ВЫПОЛНИТЬ. Точка,, ив которой происходит возврат управления,
устанавливается следующим образом:
а} если имя-процедуры-1 есть, имя параграфа- и- имя-процедуры-2
опущено,, возврат происходит после выполнения последнего операто-
ра имени-процедуры- ;
б) если имя-процедуры-1 есть имя' секции, ш иыя-процедуры-2- опу-
щено, возврат происходит после выполнения последнего предложения
последнего параграфа имени-процедуры-1;
в) если имя-процедуры-2 указано и является именем параграфа,
возврат происходит после выполнения последнего- оператора этого па-
раграфа;
г) если имя-процедуры-2 указано, и является именем секции, возв-
рат происходит после выполнения последнего предложения последне-
го параграфа этой секции.
Операторы ПЕРЕЙТИ и ВЫПОЛНИТЬ могут появиться внутри
области действия оператора ВЫПОЛНИТЬ. Если область действия
состоит только из имени-процедуры-1, то находящийся в этой процеду-
ре оператор ПЕРЕЙТИ не должен передавать управление процедуре
вне этой области. Точка выхода внутреннего оператора ВЫПОЛНИТЬ
может совпадать g точкой выхода внешнего ВЬГПОЛНИТЬ.. Эта об-
щая точка выхода должна быть именем параграфа, состоящего только
из оператора ВЫЙТИ.
Когда оператор ВЫПОЛНИТЬ включает в свою область действия
другой оператор ВЫПОЛНИТЬ, область действия внутреннего ВЫ-
ПОЛНИТЬ должна находиться целиком внутри области действия внеш-
него ВЫПОЛНИТЬ или вне ее. Иначе говоря, точка выхода.внешнего
ВЫПОЛНИТЬ не может находиться внутри области действия внут-
реннего ВЫПОЛНИТЬ, за исключением общей точки выхода..
Управление может быть передано последовательности операторов,
составляющих область действия оператора ВЫПОЛНИТЬ, операто-
ром, отличным от ВЫПОЛНИТЬ. В этом случае управление проходит
через последний оператор области действия к следующему за ней опе-
ратору, как в елучае, когда оператор ВЫПОЛНИТЬ вообще не отно-
сится к этим процедурам*
Формат 1 оператора ВЫПОЛНИТЬ вызывает выполнение
указанных процедур один раз, после чего управление возвращается
к оператору, следующему за оператором ВЫПОЛНИТЬ,
Формат 2 оператора ВЫПОЛНИТЬ вызывает выполнение про-
цедур фиксированное количество раз, определяемое значением иден-
тификатора-1 или целым-1, после чего управление передается операто-
ру, следующему за оператором ВЫПОЛНИТЬ. Если значение иден-
тификатора-1 или целое-1 равно нулю или отрицательно в начале вы-
полнения оператора ВЫПОЛНИТЬ, управление сразу передается опе-
ратору, следующему за ВЫПОЛНИТЬ. Если оператор ВЫПОЛНИТЬ
начал выполняться, изменение значения идентификатора-1 не изменяет
количества выполнений процедур.
Формат 3 оператора ВЫПОЛНИТЬ вызывает выполнение ука-
занных процедур до тех пор, пока условие во фразе ДО не станет ив-
тинным (об условиях см. оператор ЕСЛИ). В последнем случае управ-
ление передается оператору, следующему за оператором ВЫПОЛ-
НИТЬ. Если условие является истинным в тот момент, когда управле-
ние достигает оператора ВЫПОЛНИТЬ, указанные в операторе про-
цедуры не выполняются.
Формат 4 позволяет наращивать значение одного или более
идентификаторов или имен-индексов во время выполнения оператора
ВЫПОЛНИТЬ.
Начальные значения идентификатора-2 (имени-индеква-2), иден-
тификатора-5 (имени-индекса-5) и идентификатора-8 (нмени-индеква-8)
должны быть положительными. Однако транслятор допускает и отри-
цательные начальные значения.
Если в операторе ВЫПОЛНИТЬ используются имена-индеквов,
фразы ОТ и НА действуют так же, как и оператор УСТАНОВИТЬ.
Имен а-индексов и оператор УСТАНОВИТЬ относятся к средствам об-
работки таблиц и описаны детально в соответствующей главе.
Во время выполнения оператора ВЫПОЛНИТЬ изменение значе-
ния имени-индекса или идентификатора, указанного во фразе ,ОТ, не
изменяет числа выполнений процедуры. Изменение же значений имен-
индексов или идентификаторов фразы МЕНЯЯ или идентификаторов
фразы НА повлечет изменение числа выполнений процедур.
В последующем описании формата все, что говорится об идентифи-
каторе-n, относится также к имени-индекса-п.
При выполнении оператора, когда изменяется один идентификатор,
вначале идентификатору-1 присваивается указанное начальное значе-
ние (идентификатора-2 или литерала-2). Затем проверяется условие-1,
Если условие-1 ложно, происходит выполнение процедуры, после че-
го происходит изменение идентификатора-1 на указанное приращение
(йдентификатор-3 или литерад-3) и вновь проверяется условие-!.
Эго повторяется до тех пор, пока условие-1 не станет истинным, после
чего управление получает следующий за ВЫПОЛНИТЬ оператор.
Если условие-1 истинно для начального значения идентификатора-!,
процедура не выполняется и управление передается оператору, сле-
дующему за оператором ВЫПОЛНИТЬ. Рис. 15 иллюстрирует логику
ВЫПОЛНИТЬ при изменении одного идентификатора.
При выполнении оператора, когда изменяются два идентификато-
ра, сначала идентификатору-1 ц идентификатору-4 присваиваются их
начальные значения (идентификатора-2 или литерала-2 и идентифи-
108
Рис. 15. Логика оператора ВЫПОЛНИТЬ при изменении одного илеити*
фикатора:
И1 — идентификатор; У-1 — уеловие; НЗ — начальное значение; П-1, Л-2 — иро»
------ дедуры; ВП — величина приращении .
Рис. 16. Логика оператора ВЫПОЛНИТЬ' при иэяенеиин двух ндеитнфн*
катаров:
И1, И4 — идентификаторы; НЗ — начальное значение; У-1, У-2 уровни; ВП » ве>
‘ личина нрнращеин»; П-1, П-S — процедуры _
109
ПО
Рис. 17. Логика оператора ВЫПОЛНИТЬ при изжевеяин трех идентификя-
торов"
И1, И4, ИТ — вдевтифнкаторы; НЗ — начальное значение; У-1, У-2, У-8 — устомпч
R-1, П-2 — процедуры; ВП — величина приращения
катора-5 или литерала-5 соответственно). Затем проверяется условие-1
Если оно истинно, управление передается оператору, следующему за
ВЫПОЛНИТЬ; если ложно, проверяется условие-2. Если уеловие-2
ложно, указанные процедуры выполняются один раз, после чего иден-
тификатор^ получает приращение, соответствующее идентификатору-6
(литералу-6). Затем снова проверяется условие-2. Проверка условия-2
и увеличение идситификатора-4 продолжаются до тех пор, ‘пока усло-
вие-2 не станет истинным. Когда условие-2 истинно, идентификатор-4
устанавливается снова в его начальное значение (идентификатора-5 или
литерала-5), а идентификатор-! получает приращение, соответствую-
щее идентификатору-3 (литералу-3). Проверяется условие-1, и описан-
ные действия повторяются до тех пор, пока условие-! не станет ис-
тинным. При истинности условия-1 управление передается оператору,
следующему заВЫПОЛ НИТЬ, Рве. 16 иллюстрирует логику ВЫПОЛ-
НИТЬ при изменении двух идентификаторов.
Если условие-! было истинным в самом начале выполнения опера-
тора, по завершении выполнения оператора ВЫПОЛНИТЬ иденти-
фикатор-1 и идентификатор-4 содержат начальные значения. В про-
тивном случае значение идентификатора-! отличается от последнего
использованного значения на величину приращения.
Оператор ВЫПОЛНИТЬ при изменении трех идентификаторов вы-
полняется так же, как при изменении двух идентификаторов, с той
лишь разницей, что идентификатор-7 проходит через полный цикл
всякий раз, когда идентификатор-4 получает приращение, соответст-
вующее идентификатору-6 (литералу-6), а идентификатор-4 в свою
очередь проходит через полный цикл всякий раз, когда идентификатор-!
получает приращение, соответствующее идентификатору-3 (литера-
лу-3). Рис. 17 иллюстрирует логику оператора ВЫПОЛНИТЬ при
изменении трех идентификаторов.
5-2.4. Оператор ОСТАНОВИТЬ
Оператор ОСТАНОВИТЬ используется для указания окончания
выполнения программы или временной приоетановки ее выполнения.
Формат:
(РАБОТУ )
ОСТАНОВИТЬ I , >
------------ ) литерал (
Для указания окончания выполнения программы используется
оператор ОСТАНОВИТЬ g фразой РАБОТУ. При выполнении такого
оператора происходит передача управления операционной системе.
Оператор ОСТАНОВИТЬ РАБОТУ должен быть единственным
или последним оператором в последовательности повелительных опе-
раторов. Перед выполнением оператора ОСТАНОВИТЬ РАБОТУ все
выходные файлы должны быть закрыты.
Для передачи (только для ОС ЕС) операционной системе или вызы-
вающей программе информации об успешном или неуспешном заверше-
нии программы перед выполнением оператора ОСТАНОВИТЬ РАБО-
ТУ должно быть установлено значение специального регистра КОД-
111
ВОЗВРАТА. Значение специального регистра устанавливается вы-
полнением оператора ПОМЕСТИТЬ, в котором в качестве принимаю-
щего поля указано нмя этого специального регистра. Нормальный
код возврата при успешном завершении программы равен нулю. Дру-
гие значения должны быть кратны четырем. Максимальное значение
кода возврата не может превышать 4095.
Об использовании оператора ОСТАНОВИТЬ РАБОТУ в вызываю-
щей и вызываемой программах см. п. 11.5.
Оператор ОСТАНОВИТЬ литерал используется для указания про-
межуточного останова. Литерал может быть числовым, нечисловым
или любой стандартной константой, кроме ВСЕ.
При выполнении оператора ОСТАНОВИТЬ литерал происходит
вывод указанного литерала в кодом сообщения, сгенерированным опе-
рационной системой, на пульт управления оператора ЭВМ. Выполне-
ние программы приостанавливается, пока Управляющая программа
не получит ответного сообщения. После ответа оператора ЭВМ выпол-
нение программы продолжается с оператора, следующего за операто-
ром ОСТАНОВИТЬ. Выдача такого литерала может быть предусмот-
рена программистом для определения действия, которое должен вы-
полнить далее оператор ЭВМ.
Пример.
ОСТАНОВИТЬ 'ПЕРЕМЕСТИТЬ КОЛОДУ ПЕРФОКАРТ в УСТРОЙСТВА
\ ВЫВОДА НА УСТРОЙСТВО ВВОДА'.
После выполнения требуемых действий оператор ЭВМ может во-
зобновить выполнение программы нажатием клавиши КТ для ДОС ЕС
или вводом команды REPLY для ОС ЕС.
5.2.5. Оператор ВЫЙТИ
Оператор ВЫЙТИ обеспечивает общую точку выхода для ряда про-
цедур.
Формат:
имя-параграфа. ВЫЙТИ.
Если требуется передать управление конечной точке выхода ряда
процедур, обычно это делается с помощью оператора перехода к сле-
дующему параграфу или секции. Однако в некоторых случаях это не
дает должного эффекта, как, например, в случае, когда эта Точка на-
ходится в конце области действия оператора ВЫПОЛНИТЬ или декла-
ративной секции. Оператор ВЫЙТИ обеспечивает возможность свя-
зать нмя процедуры с этой точкой выхода. Если управление достигает
оператора ВЫЙТИ, когда связанный с ним оператор ВЫПОЛНИТЬ
или ИСПОЛЬЗОВАТЬ является активным, оператор ВЫЙТИ обес-
печивает возврат управления оператору, следующему за оператором
ВЫПОЛНИТЬ или оператором, вызвавшим вход в декларативную
секцию. В противном случае управление переходит через оператор
ВЫЙТИ к первому предложению следующего параграфа.
112
Оператор ВЫЙТИ всегда образует отдельное предложение, перед
которым должно стоять имя параграфа. Оператор ВЫЙТИ должен
быть единственным оператором в этом параграфе.
5.2.6. Оператор ЕСЛИ
Оператор ЕСЛИ вызывает выполнение той или иной последова-
тельности операторов в зависимости от истинности или ложности ука-
занного в нем условия. ------
Формат: j
рр гты 1ГЯЯЛППЛ (оператор-!
ьсли условие | СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ J
ИНАЧЕ |сЛЕ ДУЮЩЕЕ ПРЕДЛОЖЕНИЕ |
Фраза ИНАЧЕ СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ может быть опу-
щена, если за ней непосредственно следует точка, заканчивающая пред-
ложение.
Когда выполняется оператор ЕСЛИ, имеют место следующие дей-
ствия:
а) если условие является истинным, выполняется оператор, сле-
дующий непосредственно за этим условием (оператор-1). Затем управ-
ление неявно передается следующему предложению, если только 9 опе-
раторе-1 не содержится ПЕРЕЙТИ К имя-процедуры. Если условие
Истинно и употреблена фраза СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ, уп-
равление явно передается следующему предложению;
б) если условие является ложным, выполняется оператор, следую-
щий за ИНАЧЕ (оператор-2), или, если фраза ИНАЧЕ опущена, вы-
полняется следующее предложение. Если условие ложно и за ИНАЧЕ
написано СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ, управление явно пере-
дается следующему предложению.
S
ЕСЛИ1
yt т если г уг еслиз уз пг иначе пз иначе пн еслич уч еслиз уз нз иначе пв
_________________________et ег I // ft
31
di
~вг
Рис. 18. Условный оператор с вложенными операторами ЕСЛИ:
У1, .... Уб — условия; П1, ..... пв — повелительные операторы; а! — оператор-1 для ЕСЛИ!
(если У1 ложное, выполняется следующее предложение, так как для него нет ИНАЧЕ);
Ъ1 — оператор-1 для ЕСЛИ2; Ь2 — оператор-2 для ЕСЛИ2; el <*• оператор-1 для ЕСЛИЗ; е2 —
оператор-2 для ЕСЛИЗ; dl — оператор-1 для ЕСЛИ4 (если У4 ложное, выполняется следу-
ющее предложепие. так как для него нет ИНАЧЕ); fI — оператор-1 для ЁСЛИб; 12 —
оператор-2 для ЕСЛИЗ
113
Оператор-1 и оператор-2 могут быть любым повелительным опера-
тором или условным оператором ЕСЛИ. Когда оператор, ЕСЛИ по-
является внутри другого оператора ЕСЛИ в качестве оператора-!, он
называется вложенным. Вложение операторов аналогично указанию
подчиненности арифметических выражений, заключенных в скобки
и объединенных в более крупные арифметические выражения. Операто-
ры ЕСЛИ, содержащиеся внутри операторов ЕСЛИ, должны рассмат-
риваться как парные сочетания ЕСЛИ и ИНАЧЕ, развивающиеся слева
направо, т. е. каждое встреченное ИНАЧЕ должно рассматриваться
как относящееся к предшествующему ЕСЛИ, для которого еще не было
найдено соответствующее ИНАЧЕ.
На рис. 18 изображен пример условного оператора с вложенными
операторами ЕСЛИ. Пары ЕСЛИ и ИНАЧЕ показаны линиями, сое-
Рис. 19. Схема выполнения условного оператора с вложенными операторами
ЕСЛИ:
У1» ...1 УЗ — условия; ГН, .... Пб — повелительные операторы
114
даняюшими их. На рис. 19 показана схема выполнения условного
оператора, изображенного на рис. 18.
Условие (или условное выражение^ — это выражение, значением
которого мажет быть истина или ложь в зависимости от обстоятельств,
существующих при вычислении выражения. Условные выражения ис-
пользуются в операторах ЕСЛИ, ВЫПОЛНИТЬ и ИСКАТЬ и позво-
ляют выбрать один из альтернативных путей выполнения программы
в зависимости от истинности значения условия. Условия бывают прос-
тыми и сложными.
5.2.6.1. Простые условия
Имеются пять типов простых условий: условие класса, условие
имени условия, условие отношения, условие знака, условие состояния
переключателя (только для ДОС ЕС).
Любое из перечисленных выше простых условий а предшествую-
щим словом НЕ или заключенное в круглые скобки также рассматри-
вается как простое условие. Слово НЕ, предшествующее условию, оп-
ределяет значение условия, обратное тому, которое оно имеет без сло-
ва НЕ.
Установление истинности условия будем называть проверкой соот-
ветствующего условия. Таким образом, различаются следующие 5 ти-
пов проверок: проверка класса, проверка имени условия, проверка
отношения, проверка знака, проверка состояния переключателя.
Условие класса имеет следующий формат;
1ии, /БУКВЕННОЕ )
вдеитвфяжвгор {НЕ] :ЧИСЛОВОЕ |
Проверка класса состоит в установлении того, является ли прове-
ряемое данное буквенным или числовым. Идентификатор должен быть
описан с фразой ДЛЯ ВЫДАЧИ явно или неявно или ДЛЯ ВЫЧИСЛЕ-
НИЙ-3.
Принадлежность данного к буквенному классу определяется в соот-
ветствии с фразой ПРОГРАММНЫЙ АЛФАВИТ раздела оборудова-
ния, Если фраза ПРОГРАММНЫЙ АЛФАВИТ отсутствует или во
фразе ПРОГРАММНЫЙ АЛФАВИТ указано имя алфавита, которое
именует внутреннюю основную последовательность (вариант ВНУТ-
РЕННИЙ), то данное считается буквенным, если оно состо т из букв
латинского алфавита и пробелов. Если во фразе ПРОГРАММНЫЙ
АЛФАВИТ указано имя алфавита, которое именует специальную ос-
новную последовательность (вариант СПЕЦИАЛЬНЫЙ), то данное
считается буквенным, если оно состоит из букв русского и латинского
алфавитов и пробелов.
Данное считается числовым, если оно состоит из цифр 0—9 с опе-
рационным знаком или без него в зависимостиЪт наличия литеры 3
в шаблоне проверяемого идентификатора.
Если шаблон в описании проверяемого идентификатора не содер-
жит литеры 3, значение данного считается числовым, если оно состоит
из цифр и операционный знак отсутствует.
115
Вариант ЧИСЛОВОЕ ие может применяться для данною, описан-
ного как буквенное. Вариант БУКВЕННОЕ не может применяться
для данного, описанного как числовое.
Допустимые формы проверки класса показаны в табл. II.
Т аблица 11
Тиа давнего Правильная форма проверки каавог
Буквенное Буквенно-цифровое Внешнее десятичное или внутреннее десятичное БУКВЕННОЕ буквенной ЧИСЛОВОЕ ЧИСЛОВОЕ НЕ БУКВЕННОЙ НЕ БУКВЕННОЕ НЕ ЧИСЛОВОЕ НЕ ЧИСЛОВОЕ
Условие отношения имеет формат!
идентификатор-] )
литерал-1 > знак-отношения
арифметическое-выражение-1
идентификатор-2
литерал-2
1арифметическое-выражеиие-2
Проверка отношения состоит в сравнении двух операндов, которые
могут быть идентификаторами, литералами или арифметическими вы-
ражениями. Первый операнд называется субъектом условия, второй
операнд называется объектом условия. Субъект и объект условия не
могут одновременно быть литералами.
За исключением случая сравнения двух числовых операндов субъект
и объект условия должны иметь одинаковые фразы об использовании.
Знак отношения указывает тип сравнения, которое нужно выпол-
нить в условии отношения. Допускаются следующие знаки отношения:
БОЛЬШЕ, >, НЕ БОЛЬШЕ, НЕ >, МЕНЬШЕ, <, НЕ МЕНЬШЕ,
НЕ <, РАВНО, -, НЕ РАВНО, НЕ
Знаки отношения должны выделяться е обеих сторон, пробелом.
Сравнение числовых операндов. Для операндов числового класса
сравнение производится с учетом их алгебраического значения. Срав-
нение числовых операндов допускается независимо от варианта фра-
зы об использовании, употребленной в их описании. Числовые опе-
ранды без знака считаются при сравнении положительными.
Сравнение нечисловых операндов. Для нечисловых операндов или
для одного числового и одного нечислового операндов сравнение про-
изводится с учетом фразы ПРОГРАММНЫЙ АЛФАВИТ в разделе
оборудования.
Если фраза ПРОГРАММНЫЙ АЛФАВИТ отсутствует или во фра-
зе ПРОГРАММНЫЙ АЛФАВИТ указано имя алфавита, которое име-
нует внутреннюю основную последовательность (вариант ВНУТРЕН-
НИЙ), то сравнение операндов будет производиться с учетом двоичной
последовательности кодов в наборе ДКОИ.
П6
, Если во фразе ПРОГРАММНЫЙ АЛФАВИТ указано имя алфави-
та, которое именует специальную основную последовательность (ва-
риант СПЕЦИАЛЬНЫЙ), то сравнение операндов будет производить-
ся g учетом последовательности, указанной в п. 3.1.3.
Все групповые данные рассматриваются как нечивловые операн-
ды.
Числовые и нечисловые операнды могут сравниваться, если они
описаны явно или неявно в одинаковыми фразами об ивпользованин.
Однако транслятор позволяет сравнивать групповое данное в чис-
ловым, даже если фраза об использовании числового данного не ДЛЯ
ВЫДАЧИ.
Если шаблон числовых внешних десятичных данных описан со зна-
ком, то знак будет участвовать в сравнении с нечисловым данным в
соответствии с расположением его во внутреннем представлении дан-
ного (см. фразу об использовании в разделе данных). Если в сравнении
внешних десятичных данных с буквенно-цифровыми данными знак не
должен участвовать, то следует задать специальный режим в управ-
ляющем операторе CBL транслятора (для ДОС ЕС) или в операторе
ЕХЕС управления заданиями (для ОС ЕС), вызывающем выполнение
транслятора.
Размер операнда равен общему количеству литер в операнде.
Рассмотрим два случая нечислового сравнения: операндов одина-
кового размера н операндов разного размера.
Сравнение операндов одинакового р-азме-
р а. Символы в соответствующих позициях двух операндов сравни-
ваются, начиная с крайней левой позиции, в направлении крайней пра-
вой. Если все пары, включая крайние правые, совпадают, операнды
считаются равными. Если встречается пара несовпадающих литер,
определяется их относительное положение в последовательности кодов,
внутренней или специальной в зависимости от фразы ПРОГРАММНЫЙ
АЛФАВИТ. Тот операнд будет больше, который содержит литеру,
отстоящую дальше от начала в последовательности кодов, применяе-
мой для сравнения. Например, значение БАРАНОВ будет больше, чем
вначение СИДОРОВ при сравнении в соответствии с внутренней после-
довательностью кодов, и меньше для специальной последовательности.
Сравнение операндов разного размера. Если
операнды имеют разный размер, сравнение происходит так, как если
бы более короткий операнд был дополнен справа таким количеством
пробелов, чтобы вделать размеры операндов одинаковыми.
Допустимые виды сравнения и правила их выполнения введены в
табл. 12. В ней используются следующие обозначения: НЧ — сравне-
ние выполняется по правилам для нечисловых операндов; Ч — срав-
нение выполняется по правилам для числовых операндов; прочерк
обозначает недопустимое сравнение.
Условие знака имеет формат:
П0Л©ЖИТЕЛЬН®
117
Таблица 12
Второй операнд
л •о « 1 св X
Перввй операнд , буквеино- букверио-цц кгируемый, «4вк»ируем1 я констану ЛЬ) н нечис рал я константд ясдовдй BaVnot»BBffn ’цвнЬВхВЭэ внутренний й, внутренн ей точней
1 4* а т а sa®3 ф 2« о а 9- о R «•© й о . >и .о X. ат«* S - g® S W ф _ № о 2 гандартна [УЛЬ и 41 ртерал •StU! g gw sa2 Ф ф 9 SLBB О »s! 1 5 £ ее о и «ф ы
( О ЙЙ.Г 5^4 и! 4: ® ахн сект о
Групповой* нч нч 1 нч ' нч нч нч
Буквенный, буквенно-цифровой. НЧ нч ! НЧ нч нч
буквенно-цифровой редакти- руемый, числовой редактиру-
емый Стандартная константа (кроме нч | нч — нч
НУЛЬ), и нечисловой лите- -» -
рал Стандартная константа НУЛЬ нч нч ч ч
и числовой литерал Внешний десятичный, внешний нч нч нч ч ч ч
с плавающей точкой Двоичный^ внутренний десятич- нч — ч ч ч
ный, внутренний с плаваю- щей точкой
Идентификатор, должен быть, описан как. числовое «данное.
Проверка знака состоит в определении того, является ли алгебраи-
ческое значение- данного, положительным, отрицательным иди равным
нулю. Данное считается полшкительыым, если, его значение больше
нуля, отрицательным, если его значение меньше нуля, и нулевым, если
его. значение, равно* нулю.. Поле, описанное, без знака, положительно
или нуль.
Условие имени условия имеет формат:
имя-условия
Проверка имени условия, состоит в определении того, имеет ли
условная переменная значение, связанное с именем, условия, указан-
ным в. условии, или нет. Имя-условия, должно быть- определен© в раз-
деле данных, статьей имени условия на уровне 88, которая связывает
имя-условия с одним значением, несколькими значениями или диа-
пазоном значений, которые может принимать условная, переменная.
Пусть, например, логическая запись файла на перфокартах, пре-
вышает 80 байт. Тогда первый байт записи может использоваться для
идентификации типа карты следующим образом: литера «/» в этом
байте обозначает первую карту, а литера «*» — карту продолжения.
Этим значениям могут быть присвоены имена условий:
118
01 карта.
02 шифр ШАБЛОН X.
<88 первая-кя^м ЗНАЧЕНИЕ
88 продолжение ЗНАЧЕНИЕ
Только одно из условий, указанных именами условий, может вы*
полниться для конкретной записи в файле. Для установления типа
вакион, которая обрабатывается, может быть записано ЕСЛИ продол-
жение..., и оценка условия как истинного или ложного определит по-
следующее действие, выполняемое программой.
Имя-условия используется в условиях как сокращение условия
отношения. Например, чтобы установить, истинно ли условие «про-
должение», с одинаковым эффектам можно использовать и проверку
отношения ЕСЛИ шифр — я проверку имени-условия ЕСЛИ
продолжение...
Если имя-условия «стиаяно 'С диатгазоном значений (или несколькими
диапазонами значений), проверяется, попадает ли значение условной
переменной в указанный диапазон (диапазоны) или нет, включая ко-
нечные значения. Эта проверка в случае нечисловых значений будет
выполняться в соответствии с правилами сравнения для нечисловых
операндов, т. е. в соответствии с внутренней или специальной последо-
вательностью кодов в зависимости от фразы ПРОГРАММНЫЙ АЛФА-
ВИТ в разделе оборудования.
Результатом проверки является истина, если значение условной
переменно®, связанное с проверяемым именем условия, равно значе-
нию имени-увловия или попадает в допустимый диапазон (диапазоны)
значений этого имени-условия.
Условие состояния переключателя (только для ДОС ЕС) имеет
формат:
имя-услоаая
Условие состояния переключателя проверяет состояние бит одно-
байтного переключателя UPSI. Имя-условия должно быть определе-
но в параграфе СПЕЦИАЛЬНЫЕ-ИМЕНА раздела оборудования и
должно быть связано о состоянием «включено» или «выключено» пере-
ключателя (имени реализации вида UPSI-я). Результатом проверки
является истина, если переключатель установлен в состояние, соответ-
ствующее и мен и-условия.
Для щримера, приведенного в п. 3.1.3, проверка состояния пере-
ключателей UPSI-0 и UPSI-7 может быть выполнена следующими
оперятярямм:
ЕСЛИ с-корректировкой ПЕРЕЙТИ К корректировка.
ЕСЛИ с-печатью ПЕРЕЙТИ К печат.
Если нулевой бит байта UPSI установлен в 1, произойдет переход
к процедуре корректировка», иначе будет выполняться следующий
оператор ЕСЛИ.
119
Б.2.6.2. Сложные условия
Пня или более простых условий, соединенных знаками логических
операций И, ИЛИ, образуют сложное условие. Перед знаками логи-
ческих операций и за ними должен ставиться пробел.
Имеются три знака логических операций (тзбл. 13).
Та блица 13
Звак логическое операции Операция
или Логическая дизъюнкция (истина, если любое или оба условии истинны)
И Логическая конъюнкция (истина, если оба уо«
ловия истинны)
НЕ Логическое отрицание
В табл. 14 показаны результаты логических операций в зависимос-
ти от значений простых условий А1 и В1.
Таблица 14
Значение А1 Значение В1 А! И В1 А! ИЛИ В! НВ А!
Истина Истина Истина Истина Ложь,
Ложь Истина Ложь Истина Истина
Истина Ложь Ложь Истина Ложь
Ложь Ложь Ложь Ложь Истина
Порядок вычисления сложного условия может быть определен круг-
лыми скобками. Вычисление сложного условия начинается в пара
скобок, наиболее вложенных, и продолжается по направлению к паре
скобок, менее вложенных. Если порядок вычисления не указан скоб-
ками, элементы условия вычисляются в следующем порядке:
арифметические выражения;
отношения;'
[НЕ} условие;
И и окружающие его условия в направлении слева направо;
ИЛИ и окружающие его условия в направлении слева направо.
Рассмотрим выражение:
al НЕ БОЛЬШЕ в1 ИЛИ al + в1 РАВНО cl И д! ПОЛОЖИТЕЛЬНО.
Это выражение будет вычисляться так, как если бы скобки в кем
были расставлены следующим образом:
(al НЕ БОЛЬШЕ в1) ИЛИ «(al + в1) РАВНО сП И
(д1 ПОЛОЖИТЕЛЬНО)).
Порядок вычисления следующий: . . _
а) вычисляется (al + в1). Получается некоторый промежуточный
результат, например, х;
120
б) вычисляется (al НЕ БОЛЬШЕ в1). Получается некоторый про-
межуточный результат истинности, например, и1;
в) вычисляется (х РАВНО cl). Получается некоторый промежу-
точный результат истинности, например, и2;
г) вычисляется (д1 ПОЛОЖИТЕЛЬНО). Получается некоторый
промежуточный результат истинности, например, иЗ;
д) вычисляется (и2 И иЗ). Получается некоторый промежуточный
результат истинности, например, и4;
е) вычисляется (и1 ИЛИ и4). Получается конечный результат ис-
тинности и результат вычисления условия. , ,, ч,,, v
5.2.6.3. Подразумеваемые субъекты и знаки отношения
Если сложное условие состоит из последовательности условий от-
ношения, любое условие отношения, кроме первого, может быть со-
кращено посредством пропуска в условии отношения субъекта усло-
вия или субъекта и знака отношения. В последовательности условий
отношения могут использоваться обе формы сокращения. Если приме-
нена какая-нибудь сокращенная форма условия отношения, подраэу-
мевается, что его субъектом (и знаком отношения, если он был опу-
щен) является субъект (и знак отношения) предыдущего*условия от-
ношения.
Формат подразумеваемого субъекта:
(И )
... субъект знак-отношения объект [НЕ] знак-отношения объект ...
Формат подразумеваемого субъекта н знака отношения:
(и 1
... субъект знак-отношения объект 1 pjjjpj ) [НЕ] объект ...
При использовании логической связки НЕ в сочетании с сокраще-
ниями может возникнуть двусмысленность. В этом случае НЕ интер-
претируется как знак логической операции, а не как часть знака от-
ношения. Например, al > в! И НЕ < cl ИЛИ dl равноценно
al > в1 И НЕ al > cl ИЛИ al > dl/или al > в1 И (НЕ al > el)
ИЛИ al > dl.
Ниже приведены примеры подразумеваемых субъектов и знаков
отношения. Каждый пример состоит из двух эквивалентных операто-
ров.
1. al = Ы ИЛИ НЕ > cl (субъект «а!» подразумевается];
al =* Ы ИЛИ НЕ al > cl (субъект «а1» — явный).
2. al = Ы ИЛИ cl (субъект и знак отношения <а1 =» подразумеваются);
al = Ы ИЛИ al = cl (субъект н знак отношения «а1 =» — явные).
3. al > Ы ИЛИ НЕ < cl И <11 (субъект «а1» подразумевается во втором от-
ношении, субъект «а1» и знак отношения «<» подразумеваются в третьем
отношении);
al > Ы ИЛИ НЕ al < cl И al < dl (субъект «а!» и знак отношения «О
являются явными).
121
В качестве опущенного субъекта берется самый последний субъект,
который был указан явно, т. е. <а!>.
В качестве опущенного знака отношения берется последний знак
отношения, который был указан явно, г. е. «О.
5Д. ОПЕРАТОРЫ ПЕРЕМЕЩЕНИЯ И РЕДАКТИРОВАНИЯ
5.3.1. Оператор ПОМЕСТИТЬ
Оператор ПОМЕСТИТЬ используется для пересылки данных из
одного поля основной намяты в другое иоле шш поля. Имеются два
формата оператора ПОМЕСТИТЬ.
Формат 1:
поместить <S±U£aw‘Jl в «деятифигатор-Э (иденгифивамюр-З) ...
— । -и (I МП A v^Ja/l 1 —
Формат 2 :
/СООТВЕТСТВЕННО!
ПОМЕСТИТЬ ------------------1 иДентиФикатоР"1 В идеитификатор-2
В формате 1 идентификатор-! и литерал представляют посы-
лаемое поле, а идентификатор-2, идентификатор-3 и т. д. представляют
принимающие поля. Значение идентификатора-1 (или литерал) пере-
сылается сначала в поле идентификатора-2, затем идентификатора-3
(если он указан) и т. д.
.В качестве операнда оператора ПОМЕСТИТЬ не может быть ис-
пользован идентификатор индексного данного,.
В формате 2 (с фразой СООТВЕТСТВЕННО) идентификатор-1
и идентификатор-2 должны относиться к групповым данным. При ис-
пользовании этого варианта будут пересылаться только те элементар-
ные данные идентификатора-!, для которых есть соответствующие дан-
ные в идентификаторе-2. Данные считаются воответсгвующйм«, еели
они имеют одинаковые имена и уточнители вплоть до идентификатора-1
и идентификатора-2, ио не включая их (подробнее см. фразу СООТВЕТ-
СТВЕННО в описании арифметических операторов).
Общие правила перевылки. Пересылка, в которой
оба операнда являются элементарными данными, называется элемен-
тарной. Каждое элементарное данное принадлежит к одной из следую-
щих категорий: числовой, буквенной, буквенно-цифровой, числовой
редактируемой, буквенно-цифровой редактируемой. Числовые лите-
ралы принадлежат к числовой категории; нечисловые литералы —
к буквенно-цифровой. Стандартная константа ПРОБЕЛ (ПРОБЕЛЫ)
принадлежит к буквенной категории. Стандартная константа НУЛЬ
(НУЛИ) принадлежит к числовой или буквенно-цифровой категории
в зависимости от того, принадлежит ли принимающее тюле к числовой
категории или нет. Все остальные стандартные константы принадле-
жат к буквенно-цифровой категории.
122
Если принимающим данным является буквенное, буквенно-циф-
ровое или буквенно-цифровое.редактируемое данное, то пересылка про-
изводится по следующим правилам:
а) установка данного в поле принимающего данного и, если необ-
ходимо, заполнение неиспользуемых позиций литер выполняются в
соответствии е требованиями фразы СДВИНУТО, если она присутст-
вует в описании принимающего данного. Неиспользуемые позиции за-
полняются пробелами;
б) если размер посылаемого данного больше размера принимаю-
щего, лишние литеры отсекаются после заполнения поля принимаю-
щего данного. Усечение производится в соответствии с требованиями
фразы СДВИНУТО, если она используется в описании принимающего
данного;
в) если посылаемое данное описано со знаком, пересылается его
абсолютное - значение.
Если принимающим данным является числовое или числовое редак-
тируемое данное, то пересылка производится по следующим прави-
лам:
а) выполняется выравнивание десятичной точки и, если необходи-
мо, .заполнение нулями неиспользуемых позиций литер, если только
нули не заменяются какой-либо литерой редактирования;
б) если принимающее данное описано без знака, то будет пересы-
латься абсолютное значение посылаемого данного;
в) если посылаемое данное имеет больше цифр слева или справа от
десятичной точки, чем принимающее, то лишние цифры отсекаются;
г) результаты в рабочее время могут быть непредвиденные, если
посылаемое данное содержит какие-нибудь нецифровыг символы.
Во время пересылки выполняется необходимое преобразование
данных из одной формы внутреннего представления в другую (см. пре-
образование форматов в и. 5.4) и, если требуется, редактирование в
соответствии е фразой ШАБЛОН принимающего данного.
Любая пересылка, не являющаяся элементарной, выполняется как
элементарная пересылка в буквенно-цифровое данное с той лишь раз-
ницей, что никакого преобразования данных из одной формы внутрен-
него представления в другую не производится.
Когда посылаемое и принимающее данные оператора ПОМЕСТИТЬ
при размещении в основной памяти частично накладываются, резуль-и
тат выполнения такого оператора непредсказуем.
В табл. 15. отражены все допустимые пересылки.'.
Цифры 1—6 в табл. 15 означают следующее:
1 — пересылка по правилам языка; 4
. . 2 — пересылка допустима, но выполняется без преобразований (рав-
носильна пересылке данного буквенно-цифрового в буквенно-цифро-
вое);
3 — пересылка допустима при условии, что посылаемое данное м
содержит точки;
4 — пересылка выполняется по правилам пересылки числовым
данных;
«В
Таблица 15
Тип принимающего данного
А S X • я я* я tt sg ся
Гнп пооилаемого ланнего групповое буквенное । буквен н«-цИ1 ровое внешнее де тнчнее | двоичное числовое ре тируемое буквен но-цр вое редакти мое внутреннее десятичное внешнее с i вающей теч внутреннее с плавающс точкой
Групповое 1 1 1 2 2 2 2 1 1 2 2 2
Буквенное 1 1 1 —• —• —
Буквенно-цифровое 1 1 1 5 5 5 1 5 5 □
Внешнее десятичное 2 3 1 1 3 1 1 1 1
Двоичное 2 — 3 1 1 1 3 1 1
Числовое редактнруе- 1 1 . — — —• 1 —— —
мое
Буквенно-цифровое 1 1 1 — — — 1 —•
{редактируемое
НУЛИ (числовые нлн 1 —— 1 4 4 4 1 4 4 4
буквенно-цифровые) ПРОБЕЛЫ (буквен- 1 1 1 — 1 — — —
ные) -
НАИБОЛЫПЕЕ-ЗНА- 1 1 — — 1
ЧЕНИЕ, НАИ- МЕНЫПЕЕ-ЗНА-
ЧЕНИЕ, КАВЫЧ- КИ
ВСЕ 1 1 1 6 6 6 1 6 —— —•
Числовой литерал 2 3 1 1 1 3 1 I 1
Нечисловой литерал 1 1 1 6 6 6 1 6 —•
Внутреннее десятич- 2 — 3 1 1 1 3 1 1 1
ное
Внешнее с плавающей 2 — 1 1 1 — I 1 1
точкой Внутреннее о плаваю- 2 1 1 1 1 1
щей точкой Литерал о плавающей 2 — 1 1 1 1 1 1
точкой
5 — посылаемое данное рассматривается как целое внешнее деся-
тичное;
6 — пересылка допустима при условии, что литерал еоотоит только
из цифр. Литерал равсматриваетея как целое внешнее десятичное
данное.
Прочерк означает недопустимые пересылки.
5.3.2. Оператор ПРОСМОТРЕТЬ
Оператор ПРОСМОТРЕТЬ используется для просмотра значения
данного в целью подсчитать количество появлений в нем какой-ни-
будь литеры и (или) ваменить одну литеру другой.
. 124
Формат:
ПРОСМОТРЕТЬ идентификатор 1 , литерал 1 [ЗАМЕНЯЯ НА литерал-2]
СЧИТАЯ ДО ПЕРВОГО ВСЕ
ВЕДУЩИЕ ВСЕ ВЕДУЩИЕ литерал-1 НА литерал-2
ЗАМЕНЯЯ ПЕРВЫЙ ДО ПЕРВОГО
Идентификатор должен быть либо групповым, либо элементарным
с использованием ДЛЯ ВЫДАЧИ, заданным явно или неявно.
Если идентификатор представляет нечисловое данное, просмотр
начинается а самой левой позиции литеры в значении идентификатора
и продолжается вправо.
Если идентификатор относится к числовому данному, кроме цифр
в значении идентификатора может присутствовать операционный знак.
При выполнении оператора ПРОСМОТРЕТЬ он игнорируется.
Каждый литерал должен состоять из одной литеры, принадлежа-
щей классу, совместимому с классом идентификатора. Литерал может
быть также любой стандартной константой, кроме ВСЕ. Если иден-
тификатор относится к данному числового класса, каждый литерал
должен быть цифрой или стандартной константой НУЛЬ (НУЛИ).
Когда используется формат с фразой СЧИТАЯ, количество появ-
лений заданной литеры в значении идентификатора засылается в спе-
циальный регистр СЧЕТЧИК. В остальных случаях вначение этого
регистра не изменяется.
Фраза СЧИТАЯ позволяет подсчитать следующее:
а) общее количество появлений литерала-1 в значении идентифика-
тора (фраза ВСЕ);
б) количество появлений литерала-1 в значении идентификатора
до первой литеры, отличной от литерала-1 (фраза ВЕДУЩИЕ);
в) количество литер в значении идентификатора до первого появле-
ния литерала-1 (фраза ДО ПЕРВОГО).
Правила замены одной литеры другой состоят в следующем:
а) литерал-2 заменяет литерал-1 во всех местах его появления
(фраза ВСЕ);
б) литерал-2 заменяет литерал-1 до тех пор, пока не встретится пер-
вая литера, отличная от литерала-1, или правая граница данного (фра-
ва ВЕДУЩИЕ);
в) литерал-2 заменяет все литеры данного до первого встретившегося
литерала-1 или до правой границы данного, если литерал-1 не встре-
тится (фраза ДО ПЕРВОГО);
г) литерал-2 заменяет только первое появление литерала-1 (фраза
ПЕРВЫЙ).
Ниже приводится фрагмент программы, в которой оператор ПРО-
СМОТРЕТЬ используется для выделения данных переменной длины,
125
например фамилий, отперфорированных на картах. Конец каждого
данного указывается литерой «/», конец данных на карте отмечается
л'Итерой «&», например, так:
ИВАНОВ И. И./СИДОРОВ С. С. /&
Пример.
ОФ карты МЕТКИ ОПУЩЕНЫ.
01 карта.
02 символ Ш X ПОВТОРЯЕТСЯ 80 РАЗ.
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
77 нач-знач Ш 99.
77 конец-даиных Ш 99.
77 и! Ш 99.
77 л2 Ш 99.
0J воле-фшэ ЗНАЧЕНИЕ ПРОБЕЛЫ.
02 буква ТП X ПОВТОРЯЕТСЯ 20 РАЗ.
РАЗДЕЛ ПРОЦЕДУР.
ОТКРЫТЬ ВХОДНОЙ карты.
чтенне-след-карты. ЧИТАТЬ карты В КОНЦЕ ПЕРЕЙТИ К
конец-файла. ПОМЕСТИТЬ 1 В нач-знач.
• определение конца данник на карте
ПРОСМОТРЕТЬ карта СЧИТАЯ ДО ПЕРВОГО
ВЫЧИСЛИТЬ конец-даямык = СЧЕТЧИК + 1.
• выделение данного до разделителя
просмотр. ПРОСМОТРЕТЬ карта СЧИТАЯ ДО ПЕРВОГО *7'.
ВЫПОЛНИТЬ пересылка МЕНЯЯ я! ОТ нач-знач
НА 1 ДО и1 > СЧЕТЧИК.
ВЫДАТЬ воле-фио. ПОМЕСТИТЬ ПРОБЕЛЫ В поле-фио.
* уничтожение выделенного данного
ПРОСМОТРЕТЬ карта ЗАМЕНЯЯ ДО ПЕРВОГО 7' НА ПРОБЕЛЫ.
ПРОСМОТРЕТЬ карта ЗАМЕНЯЯ ПЕРВЫЙ 7’ НА ПРОБЕЛ
ВЫЧИСЛИТЬ нач-знач = СЧЕТЧИК + 2.
ЕСЛИ кач-звач = ковен-данных ПЕРЕЙТИ К чтеиие-след-карты
ИНАЧЕ ПЕРЕЙТИ К просмотр.
конец-файла. ЗАКРЫТЬ карты. ОСТАНОВИТЬ РАБОТУ,
пересылка. ВЫЧИСЛИТЬ й2 = и1 — нач-знач + 1.
ПОМЕСТИТЬ -символ (и1) В буква <и2).
5.3.3: Оператор ПРЕОБРАЗОВАТЬ
Оператор ПРЕОБРАЗОВАТЬ используется для изменения значе-
ния данного в соответствии с некоторым правилом преобразования ли-
тер.
Формат:
ПРЕОБРАЗОВАТЬ идентификатор-3
(стандартная-константа-1
нечисловой-литерал-1
идентифи катор-1
{стандартная-констаита-2 )
нечисловой-литерал-2 >
идентификатор-2 J
126
Идентификатор-3 должен быть элементарным буквенным, буквен-
но-цифровым, числовым редактируемым данным или групповым дан-
ным.
Если идентификатор-3 представляет групповое данное, все эле-
ментарные данные этого группового данного должны иметь использо-
вание ДЛЯ ВЫДАЧИ (явно или неявно).
Идентификатор-1 и идентификатор-2 должны быть элементарными
буквенными или буквенно-цифровыми данными или групповыми дан-
ными фиксированного размера до 255 литер.
Одна и та же литера не может повторяться в нечисловом.-литерале-1
нли в значении идентификатора-1. Если литера повторяется, резуль-
таты непредсказуемы.
Стандартная-константа-1 и стандартная-константа-2 могут быть лю-
бой стандартной константой, кроме ВСЕ.
Сочетание операндов фраз ЗАМЕНЯЯ и НА определяет правило
преобразования. Если операндами этих фраз являются идентификаторы
(идентификатор-1 или идентификатор-2), правило преобразования
может быть изменено в рабочее время путем изменения значений иден-
тификаторов.
Размеры операндов фраз ЗАМЕНЯЯ и НА должны находиться в
определенном соотношении. Еели операнд фразы ЗАМЕНЯЯ состоит
из одной литеры, операнд фразы НА должен иметь такую же длину.
Стандартная-константа-1 и стандартная-константа-2 рассматриваются
как нечисловые литералы из одной литеры. Действие оператора в этом
случае состоит в том, что литеры в значении идентификатора-3, кото-
рые совпадают с литерой, представляющей значение идентификатора-1
или нечислевого-литерала-1, заменяются единственной литерой, пред-
ставляющей значение идентификатора-2 или нечислового-литерала-2.
Если операнд фразы ЗАМЕНЯЯ имеет размер больше 1, операнд
фразы НА должен иметь такой же размер или состоять из одной лите-
ры. Если размеры операндов совпадают, то действие оператора состоит
в том, что каждая литера в значении идентификатора-3, совпадающая
с какой-нибудь литерой в значении идентификатора-1 или нечисЛового-
литерала-1, заменяется литерой из соответствующей позиции в значе-
нии идентификатора-2 нли нечислового-литерала-2. Если размер опе-
ранда фразы НА равен 1, все литеры в значении идентификатора-3,
совпадающие в какой-нибудь литерой в значении идентификатора-1
или иечислового-лнтерала-1, заменяются единственной литерой иден-
тификатора^ или нечнслового-литерала-2.
Если операнды фразы ЗАМЕНЯЯ н НА оба представлены идентифи-
каторами, они должны иметь одинаковый размер.
Пример.
ПРЕОБРАЗОВАТЬ фамилия ЗАМЕНЯЯ 'IVN7 НА 'ИВН‘
Если данное «фамилия» имело значение IVANOV, после преобразо-
вания получится значение ИВАНОВ.
Этот оператор может использоваться для перекодировки данных
из одной последовательности кодов в другую. Пусть, например, имеет-
ся файл сведений о сотрудниках, рассортированный во фамилиям в
127
соответствии с последовательностью букв в русском алфавите. Так как
эта последовательность не является возрастающей во внутреннем коде
машины, такой файл не может прямо использоваться для создания
файла с индексно-последовательной организацией, ключом записи ко-
торого являлась бы фамилия. Данное «фамилия» перед помещением
записи в файл должно быть перекодировано в соответствии с возрастаю-
щей последовательностью внутренних кодов. Это может быть выполне-
но описанием последовательности исходного и результирующего кодов
как переменных секции рабочей памяти, например, так:
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
77 код-1 ШАБЛОН Х(24) ЗНАЧ 'АБГДЖЗЛНПРСТУФХЦЧШЩЬЫЭЮЯ'.
77 код-2 ШАБЛОН Х(24) ЗНАЧ 'BACBGHLNPQRnSTUVWXYZyjKbH'.
и применением в разделе процедур к каждой записи файла следующего
оператора:
ПРЕОБРАЗОВАТЬ фамилия ЗАМЕНЯЯ ЛИТЕРЫ код-1 НА ЛИТЕРЫ код-2.
Аналогичное преобразование данного «фамилия» потребуется для
извлечения записей из такого файла методом произвольного доступа.
Операнды оператора ПРЕОБРАЗОВАТЬ не должны накладывать-
ся при размещении их в основной памяти, иначе результат выполнения
такого оператора непредсказуем.
5.4. ПРЕОБРАЗОВАНИЕ ФОРМАТОВ ДАННЫХ
Операции над числовыми данными разных форматов требуют пре-
образования их в некоторый общий формат. Это преобразование тре-
бует дополнительных затрат времени и памяти. Может потребоваться
поместить данные в рабочую область, преобразовать их в другой фор-
мат, а затем выполнить операцию. Часто может понадобиться преоб-
разовать таким же образом результат.
' Если невыгодно иметь один и тот же формат данных на протяжения
всей программы или если данные разных форматов часто используют-
ся вместе в операторах, можно совершить одноразовое преобразование.
Например, если данное «а1> описано с фразой ДЛЯ ВЫЧИСЛЕНИЙ,
а «в1» — с фразой ДЛЯ ВЫЧИСЛЕНИЙ-3, «а!» можно переслать в
рабочую область, описанную с фразой ДЛЯ ВЫЧИСЛЕНИЙ-3, и
всякий раз, когда в операции будут участвовать одновременно «а!» и
<в1», обращаться к рабочему полю, а не к «а1». При использовании
такого способа преобразование совершается только однажды, а не
каждый раз, когда выполняется операция.
Пересылки групповых данных без фразы СООТВЕТСТВЕННО и
сравнения, включающие групповые данные, выполняются без преоб-
разования.
Преобразование данных с фиксированной точкой. Если операнды
арифметических операций или операций сравнения имеют различное
представление или формат ДЛЯ ВЫДАЧИ, то для выполнения опера-
ций они преобразуются в формат ДЛЯ ВЫЧИСЛЕНИЙ-3 или в фор-
мат ДЛЯ ВЫЧИСЛЕНИЙ в зависимости от размера поля. Если в one-
128
рациях пересылки операнды имеют различное представление, то сна-
чала посылаемое данное преобразуется в формат принимающего дан-
ного, а затем выполняется пересылка.
Преобразование внутренних данных с плавающей точкой. Если дан-
ное, описанное с фразой ДЛЯ ВЫЧИСЛЕНИЙ-1 или ВЫЧИСЛЕ-
НИЙ-2, участвует в операции с данными в другом формате, послед-
нее всегда преобразуется в формат с плавающей точкой. Если необхо-
димо, промежуточный результат с плавающей точкой затем преобра-
зуется в формат другого данного. Если арифметическая операция
включает данные с плавающей точкой с короткой и длинной мантис-
сами, данные с короткими мантиссами будут автоматически расширять-
ся до размера полей с длинной мантиссой.
5.5. ОПЕРАТОРЫ ВВОДА-ВЫВОДА
Для управления вводом данных из файлов на носителях данных в.
основную память и выводом данных из основной памяти в файлы на
носителях данных в Коболе служат операторы ОТКРЫТЬ, ЧИТАТЬ,
ПИСАТЬ, ОБНОВИТЬ, ПОДВЕСТИ, ЗАКРЫТЬ, ИСПОЛЬЗОВАТЬ.
Хотя оператор ИСПОЛЬЗОВАТЬ относится к типу декларативных, а
не процедурных операторов, он описывается в этом разделе, так как
логически связан с операторами ввода-вывода, позволяя программисту
определить свои процедуры обработки меток файла или ошибок ввода-
вывода (декларативные процедуры) в дополнение к соответствующим
системным процедурам.
Единицей данных, которая становится доступной по оператору
ЧИТАТЬ или передается по оператору ПИСАТЬ, является логическая
запись. Программисту не нужно заботиться о таких операциях, как
передача данных между периферийными устройствами и областью
ввода-вывода, ‘объединение записей в блоки и выделение записей из
блока, переключение томов. Эти операции выполняются автоматичес-
ки операционной системой.
При описании операторов ввода-вывода используются термины
«том» и «катушка». Томом называется физическая единица носителя
данных: катушка, магнитной ленты, пакет магнитных дисков и т. п.
Термин «том» применим ко всем периферийным устройствам. Термин
«катушка» применим только к магнитной ленте. Последовательный
файл на магнитных дисках здесь рассматривается как логически экви-
валентный файлу на магнитной ленте.
Для ввода небольшого объема данных с системного ввода (SYSIPT
в ДОС ЕС, SYSIN в ОС ЕС) и пишущей машинки (CONSOLE) и выво-
да на системный перфоратор (SYSPUNCH), системную печать (SYSLST
в ДОС ЕС, SYSOUT в ОС ЕС) и пишущую машинку (CONSOLE) пред-
назначены операторы ПРИНЯТЬ и ВЫДАТЬ.
5.5.1. Оператор ОТКРЫТЬ
Оператор ОТКРЫТЬ подготавливает к обработке входные, выход-
ные и входные-выходные файлы. Он выполняет проверку и (или) за-
пись меток и некоторые другие операции по вводу-выводу.
5 Зак. 73
129
Формат для ДОС ЕС:
входной имя-файла-1
'РЕВЕРСНО
БЕЗ ПЕРЕМОТКИ
открыть
[имя-файла-2
'РЕВЕРСНО
БЕЗ ПЕРЕМОТКИ
ВЫХОДНОЙ имя-файла-3 [БЕЗ ПЕРЕМОТКИ)
[имя-файла-4 [БЕЗ ПЕРЕМОТКИ]) • • i
ВХОДНОЙ-ВЫХОДНОЙ имя-файла-5 )имя-файла-6) .
Формат для ОС ЕС:
ОТКРЫТЬ
ВХОДНОЙ имя-файла-1
'РЕВЕРСНО
БЕЗ ПЕРЕМОТКИ
[ДИСПОЗИЦИЯ
LEAVE '
REREADj
DISP
[имя-файла-2
Г РЕВЕРСНО
БЕЗ ПЕРЕМОТКИ
[ДИСПОЗИЦИЯ
LEAVE
REREAD
DISP
ВЫХОДНОЙ имя-файла-3 [БЕЗ ПЕРЕМОТКИ] [ДИСПОЗИЦИЯ
LEAVE '
REREAD
DISP
[имя-файла-4 [БЕЗ ПЕРЕМОТКИ] [ДИСПОЗИЦИЯ
[ВХОДНОЙ-ВЫХОДНОЙ имя-файла-5 [имя-файла-6]
LEAVE •
REREAD
DISP
Фразы ВХОДНОЙ, ВЫХОДНОЙ или ВХОДНОЙ-ВЫХОДНОЙ
могут появляться в операторе в любом порядке.
Фраза ВХОДНОЙ-ВЫХОДНОЙ может быть указана только для
файлов на магнитных дисках.
Каждое имя-файла должно быть определено статьей описания фай-
ла в разделе данных.
Оператор ОТКРЫТЬ должен использоваться для всех файлов, об-
рабатываемых в программе, кроме сортируемого файла, и выполняться
перед первым оператором ЧИТАТЬ, ПОДВЕСТИ, ОБНОВИТЬ или
ПЙСАТЬ для этого файла. Повторно для одного и того же файла опе-
ратор ОТКРЫТЬ может быть выполнен только после выполнения опе-
ратора ЗАКРЫТЬ для этого файла. Оператор ОТКРЫТЬ не вводит и
не выводит первую запись данных. Для ввода или вывода первой за-
писи данных нужно выполнить соответственно оператор ЧИТАТЬ или
ПИСАТЬ.
130 J
При проверке или записи первой метки файла оператор ОТКРЫТЬ
вызывает выполнение декларативной процедуры обработки начальной
стандартной метки пользователя или нестандартной метки, если она
была задана оператором ИСПОЛЬЗОВАТЬ в декларативной части раз-
дела процедур.
фраза ВХОДНОЙ-ВЫХОДНОЙ используется, если файл на маг-
нитных дисках открывается как для операций ввода, так и для опера-
ций вывода. Так как этот вариант предполагает существование файла,
он не может использоваться, если файл открывается для первоначаль-
ного создания. Выполнение оператора ОТКРЫТЬ с фразой ВХОДНОЙ-
ВЫХОДНОЙ состоит в проверке метки, выполнении декларативной
процедуры обработки меток пользователя, если она была задана опера-
тором ИСПОЛЬЗОВАТЬ, и записи метки.
Файл может открываться как ВЫХОДНОЙ, ВХОДНОЙ или ВХОД-
НОЙ-ВЫХОДНОИ сколько угодно раз в одной и той же программе
при условии, что каждому последующему оператору ОТКРЫТЬ пред-
шествует оператор ЗАКРЫТЬ без фразы ТОМ или КАТУШКУ.^
Фраза РЕВЕРСНО указывает, что файл должен быть открыт для
чтения записей в обратном порядке, т. е. начиная в последней записи,
и применима только для файлов на магнитной ленте: однотомных и
(только для ОС ЕС) многотомных. Если файл имеет нестандартные
метки, эту фразу можно использовать только в случае, если за послед-
ней меткой следует ленточная марка. Файл должен иметь формат за-
писей F или (только для ОС ЕС) U. Если фраза указана для файлов,
содержащих записи формата U, логические записи должны быть вы-
ровнены на границу двойного слова, иначе запись не может быть об-
работана правильно.
Фразы РЕВЕРСНО и БЕЗ ПЕРЕМОТКИ (только для ДОС ЕС) не
вызывают переустановки магнитной ленты при открытии файла. Поэто-
му при использовании этой фразы файл должен быть предваритель-
но установлен в конец файла, если используется фраза РЕВЕРСНО, •
или в начало файла, если используется фраза БЕЗ ПЕРЕМОТКИ. Если
не указана ни фраза БЕЗ ПЕРЕМОТКИ, ни фраза РЕВЕРСНО, вы-
полнение оператора ОТКРЫТЬ вызовет установку файла в его начало. '
Фраза РЕВЕРСНО (только для ОС ЕС) вызывает позиционирова-
ние магнитной ленты в конец файла.
Фраза БЕЗ ПЕРЕМОТКИ (только для ОС ЕС) не определяет спо-
соба позиционирования файла. Поэтому, если даже фраза БЕЗ ПЕРЕ-
МОТКИ указана, позиционирование файла должно быть определено
с помощью управляющего оператора DD.
Фраза ДИСПОЗИЦИЯ (только для ОС ЕС) задает вариант позицио-
нирования тома.' Так как понятие позиционирования применимо толь-
ко к файлам на магнитных лентах, эта фраза игнорируется, если она
используется для файла на магнитных дисках. Если последующий том
устанавливается не на то же устройство, фраза ДИСПОЗИЦИЯ указы-
вает позиционирование томов на конец тома в следующих случаях:
а) когда конец тома установлен автоматически. Автоматически
конец тома устанавливается, если условие конца тома возникает при
выполнении оператора ЧИТАТЬ или ПИСАТЬ;
5*
131
б) когда конец тома вынужденно установлен выполнением опера*
тора ЗАКРЫТЬ КАТУШКУ (ТОМ) С УСТАНОВКОЙ.
Если используется ДИСПОЗИЦИЯ LEAVE, обрабатываемый том
устанавливается на конец файла на томе, если не указана фраза РЕ*
ВЕРСНО. Если указана фраза РЕВЕРСНО, обрабатываемый том увта-
навливается на начало файла (т. е. логический конец) на томе.
Если используется ДИСПОЗИЦИЯ REREAD, каждый том перема-
тывается и устанавливается на начало файла на томе, если только не
задана фраза РЕВЕРСНО. Если фраза РЕВЕРСНО указана, том пе-
реустанавливается в конец файла (т. е. логическое начало) на томе.
Если указана ДИСПОЗИЦИЯ DISP, перемотка, разгрузка и дру-
гие действия выполняются в соответствии с параметром DISP’в управ-
ляющем оператор'^ DD, связанном с файлом, независимо от того, ука-
зана в операторе ОТКРЫТЬ фраза РЕВЕРСНО или нет.
Если ни фраза ДИСПОЗИЦИЯ, ни фраза РЕВЕРСНО не указаны,
предполагается ДИСПОЗИЦИЯ DISP.
5;5.2. Оператор ПОДВЕСТИ
- Оператор ПОДВЕСТИ инициирует обработку сегмента индексного
файла при последовательном доступе о заданного значения ключа.
Формат:
ПОДВЕСТИ ЗАПИСЬ имя-файла ПРИ ОШИБКЕ КЛЮЧА повелительный-
оператор
Имя-файла должно быть определено статьей описания файла в раз-
деле данных.
Обычно обработка индексного файла с последовательным доступом
выполняется последовательно с первой записи по последнюю или пока
файл не будет закрыт. Для того чтобы начать обработку файла не е пер-
вой записи или продолжить обработку не со следующей записи, тре-
буется выполнит^ оператор ПОДВЕСТИ перед* оператором ЧИТАТЬ
для требуемой записи. Перед выполнением оператора ПОДВЕСТИ
в имя данного, указанное во фразе НОМИНАЛЬНЫЙ КЛЮЧ, долж-
но быть помещено значение ключа, с которого требуется начать
обработку. Затем обработка продолжается последовательно до тех пор,
пока не встретится, оператор ПОДВЕСТИ или ЗАКРЫТЬ или не
будет достигнут конец файла.
Если обработка файла должна быть начата с первой записи, перед
первым оператором ЧИТАТЬ не требуется выполнение оператора ПОД-
ВЕСТИ.
Если значение данного НОМИНАЛЬНЫЙ КЛЮЧ недействитель-
но при выполнении оператора ПОДВЕСТИ, управление передается по-
велительному-оператору, указанному во фразе ПРИ ОШИБКЕ КЛЮ-
ЧА. Ключ считается недействительным, когда в файле не найдена тре-
буемая запись.
Транслятор (только для ОС ЕСУ допускает опускать фразу ПРИ
ОШИБКЕ КЛЮЧА. Если фраза ПРИ ОШИБКЕ КЛЮЧА не указана,
ситуация недействительного ключа вызывает выполнение декларатив.-
132
ной процедуры ошибки, если она определена для данного файла. Если
не определена ни фраза ПРИ ОШИБКЕ КЛЮЧА, ни декларативная
процедура ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРО-
ЦЕДУРЫ ОШИБКИ, может произойти ненормальное завершение за-
дания.
5.5.3. Оператор ЧИТАТЬ
Оператор ЧИТАТЬ делает доступной для обработки очередную или
определенную запись файла в зависимости от метода доступа.
При последовательном доступе оператор ЧИТАТЬ делает доступ-
ной очередную логическую запись входного файла и передает управле-
ние указанному повелительному оператору при достижении кбнца
файла.
При произвольном доступе оператор ЧИТАТЬ делает доступной
определенную запись файла и передает управление указанному пове-
лительному оператору, если содержимое имени данного фразы ФАК-
ТИЧЕСКИЙ КЛЮЧ или НОМИНАЛЬНЫЙ КЛЮЧ оказывается не-
действительным.
Формат:
ЧИТАТЬ ЗАПИСЬ имя-файла [В идентификатор]
(В КОНЦЕ ] “
[ПРИ ОШИБКЕ КЛЮЧА I повелительный-оператор
При выполнении оператора ЧИТАТЬ запись становится доступной
в области ввода и остается в ней до тех пор, пока для этого файла не
будет выполнен следующий оператор ввода-вывода. Если файл содер-
жит несколько типов логических записей, все они попадают в одну и
ту же область памяти. Это эквивалентно неявному переопределению этой
области. Доступна обработке только информация, присутствующая
в текущей записи. В разделе'процедур не может быть ссылок на ин-
формацию, которой фактически нет в текущей записи. Например,
нельзя обращаться к n-му повторению данного, которое появляется
в записи меньше, чем п раз. Результат выполнения такой программы
непредсказуем.
Имя-файла должно быть определено втатьей описания файла в раз-
деле данных.
Фраза «В идентификатор! делает оператор ЧИТАТЬ эквивалент-
ным последовательности операторов:
ЧИТАТЬ имя-файла ....
ПОМЕСТИТЬ имя-записи В идентификатор.
Запись пересылается в поле идентификатора" по правилам операто-
ра ПОМЕСТИТЬ без фразы СООТВЕТСТВЕННО. Идентификатор
может быть именем данного из секции рабочей памяти или связи или
именем записи выходного файла, предварительно открытого. Запись
становится доступной как в области ввода,так и в области, определен-
ной идентификатором. Размер области, определяемой идентификато-
ром для файлов с записями формата U или V, должен быть достаточ-
ным, чтобы вместить максимальную по размеру запись файла. При ис-
133
пользовании оператора ЧИТАТЬ с фразой «В идентификатор» упро-
щается отладка программы, так как области рабочей памяти в распе-
чатке разгрузки основной памяти найти легче, чем области ввода-вы-
вода. При этом, если записи в файлах сблокированы, легче установить,
какая запись блока обрабатывалась в момент ненормального заверше-
ния задания.
Фраза В КОНЦЕ должна указываться для файлов с последователь-
ным доступом. Она определяет повелительный-оператор, который
должен выполниться, когда будет достигнут логический конец файла.
После выполнения этого повелительного-оператора читать файл нель-
зя, пока он не будет закрыт оператором ЗАКРЫТЬ и не открыт вновь
оператором ОТКРЫТЬ.
Последовательный файл может быть описан с вариантом НЕОБЯ-
ЗАТЕЛЬНОГО во фразе ДЛЯ раздела оборудования. Если в управ-
ляющем операторе ASSGN (только для ДОС ЕС) указан параметр
IGN или в операторе DD (только для ОС ЕС) указан параметр DUMMY
или NULLFILE, первый оператор ЧИТАТЬ для этого файла вызовет
выполнение повелительного оператора, указанного во фразе В КОН-
ЦЕ.
Если при обработке многотомного последовательного файла опера-
тором ЧИТАТЬ обнаруживается конец тома, выполняются следую-
щие операции:
а) стандартная процедура конечной метки тома и процедура про-
граммиста конечной метки тома, если она была задана предложением
ИСПОЛЬЗОВАТЬ. Выполняется позиционирование тома (только в
ОС ЕС), как это определено в операторе ОТКРЫТЬ;
б) . переключение томов;
в) стандартная процедура начальной метки тома и процедура про-
граммиста начальной метки тома, если она задана. Порядок выполне-
ния этих процедур указывается оператором ИСПОЛЬЗОВАТЬ в де-
кларативной процедуре обработки метки;
г) становится доступной первая запись данных нового тома.
Фраза ПРИ ОШИБКЕ КЛЮЧА должна быть указана для файлов
с произвольным доступом, т. е. для файлов, описанных с фразой ДОС-
ТУП ПРОИЗВОЛЬНЫЙ в разделе оборудования.
Перед выполнением оператора ЧИТАТЬ для файла с произвольным
доступом данное ФАКТИЧЕСКИЙ КЛЮЧ (при прямой организации
файла) или НОМИНАЛЬНЫЙ КЛЮЧ (при индексной или относи-
тельной организации файла) должно быть установлено на нужное зна-
чение. При прямой организации файла поиск требуемой записи произ-
водится только на дорожке, задаваемой значением данного ФАКТИ-
ЧЕСКИЙ КЛЮЧ. Область поиска может быть расширена до целого
цилиндра фразой ПРИМЕНИТЬ РАСШИРЕННЫЙ-ПОИСК (только
для ДОС ЕС) или до количества дорожек или целого файла в соответ-
ствии с параметром LIMCT в управляющем операторе DD (только для
ОС ЕС).
Если значение данного ФАКТИЧЕСКИЙ КЛЮЧ или НОМИНАЛЬ- .
НЫЙ КЛЮЧ окажется недействительным, выполняется повелитель-
ный оператор, указанный во. фразе ПРИ ОШИБКЕ КЛЮЧА.
134
Для файла о прямой организацией ключ считается недействитель-
ным, если в определенных для поиска границах файла нет требуемой
записи или адрес дорожки, указанный значением данного ФАКТИЧЕС-
КИЙ КЛЮЧ, выходит за границы файла.
Для файла с индексной организацией ключ считается недействи-
тельным, если в файле нет записи, для которой значение данного КЛЮЧ
ЗАПИСИ совпадало бы со значением данного НОМИНАЛЬНЫЙ
КЛЮЧ.
Для файла с относительной организацией (только для ОС EQ
ключ считается недействительным, если относительный номер записи,,
указанный в данном НОМИНАЛЬНЫЙ КЛЮЧ, выходит за границы
файла.
Транслятор Кобола (только для ОС ЕС) позволяет опускать фразу
ПРИ ОШИБКЕ КЛЮЧА. Если эта фраза не указана и возникает ситуа-
ция недействительного ключа, выполняется декларативная процедура
ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБ-
КИ, если она определена для данного файла. Если не указаны ни фра-
за ПРИ ОШИБКЕ КЛЮЧА, ни декларативная процедура обработки
ошибки, ситуация недействительного ключа игнорируется.
5.5.4. Оператор ПИСАТЬ
Оператор ПИСАТЬ служит для включения логической записи в
выходной файл. Он передает управление повелительному оператору,
указанному в операторе ПИСАТЬ, если при последовательном доступе
к файлу на магнитных дисках достигается граница файла, а при про-
извольном доступе обнаруживается, что значение данного ФАКТИ-
ЧЕСКИЙ КЛЮЧ или НОМИНАЛЬНЫЙ КЛЮЧ недействительно.
Для файлов печати он может выполнять вертикальное позициониро-
вание записей, а для файлов, выводимых на перфокарты, — управлять
выбором приемного кармана.
Оператор ПИСАТЬ имеет 3 формата.
Формат 1:
ПИСАТЬ имя-записи [ИЗ ПОЛЯ идентификатор-1]
целое СТРОК
идентификатор-2 СТРОК ]
,мнемоническое-имя
[В КОНЦЕ СТРАНИЦЫ повелительный-оператор)
Формат 2:
ПИСАТЬ имя-записи [ИЗ ПОЛЯ идентификатор-1]
ПОСЛЕ УСТАНОВКИ {*Хфикатор.2 } СТРОК
[В КОНЦЕ СТРАНИЦЫ повелительный-оператор]
Формат 3:
ПИСАТЬ имя-записи [ИЗ ПОЛЯ идентификатор-1]
ПРИ ОШИБКЕ КЛЮЧА повелительный-оператор
— ПРОДВИЖЕНИЯ
ПОСЛЬ!
135
Форматы 1 и 2 применимы только к стандартным последователь-
ным файлам, формат 3 — к файлам с произвольным и последователь-
ным доступом на магнитных дисках.
Перед выполнением первого оператора ПИСАТЬ для этого файла
должен быть выполнен оператор ОТКРЫТЬ.
После выполнения оператора ПИСАТЬ логическая запись стано-
вится недоступной для обработки, если для этого файла не была
указана фраза ОБЩАЯ ОБЛАСТЬ ЗАПИСИ в разделе оборудова-
ния.
Имя-записи в форматах должно быть именем записи файла, опи-
санного в секции файлов раздела данных с индикатором уровня ОФ.
Оно не может быть именем записи сортируемого файла.
Фраза ИЗ ПОЛЯ делает оператор ПИСАТЬ эквивалентным после-
довательности операторов:
ПОМЕСТИТЬ идентификатор-1 В имя-записи,
ПИСАТЬ имя-записи ....
Идентификатор-1 пересылается в имя-записи по правилам для опе-
ратора ПОМЕСТИТЬ без фразы СООТВЕТСТВЕННО. Он должен
быть определен в секции рабочей памяти или связи или в описании дру-
гого файла.
Фраза ПРОДВИЖЕНИЯ или УСТАНОВКИ в форматах 1 и 2
обеспечивает вертикальное позиционирование записей на печатном
листе. Если эти фразы не используются, при печати обеспечивается
автоматическое продвижение на одну строку. При использоваййи фраз
ПРОДВИЖЕНИЯ и УСТАНОВКИ автоматическое продвижение по-
давляется.
Если фраза ПРОДВИЖЕНИЯ или УСТАНОВКИ указана в ка-
ком-нибудь операторе ПИСАТЬ для записи файла, все остальные опе-
раторы ПИСАТЬ для этого файла должны содержать аналогичную фра-
зу. Фразы ПРОДВИЖЕНИЯ и УСТАНОВКИ не могут быть обе ука-
заны для одного и того же файла.
. Если используется фраза ПРОДВИЖЕНИЯ или УСТАНОВКИ,
первый байт в каждой логической записи должен быть зарезервирован
программистом для управляющего символа. Транслятором будут по-
строены команды, обеспечивающие засылку символа управления пе-
чатью (или символа выбора кармана) в первый байт записи. Програм-
мист должен позаботиться о том, чтобы на перфоленте управления пе-
чатью были отперфорированы соответствующие коды.
Идентификатор-2 во фразе ПРОДВИЖЕНИЯ (формат 1) должен
быть именем неотрицательного числового элементарного данного, опи-
санного как целое. Его значение должно быть меньше 100. Если иден-
тификатор-2 указан во фразе ПРОДВИЖЕНИЯ, печатный лист про-
двигается на количество строк, определяемое идентификатором-2.
Целое во фразе ПРОДВИЖЕНИЯ должно быть меньше 100. Если
целое указано, печатный лист продвигается иа количество строк, оп-
ределяемое целым.
Мнемоническое-имя во фразе ПРОДВИЖЕНИЯ должно быть име-
нем, определенным в параграфе СПЕЦИАЛЬНЫЕ-ИМЕНА раздел
136
оборудования для одного из имен реализации С01—С12, CSP, S01
нли S02. Оно используется для прогона до кодов 1—9, 10—12 на пер-
фоленте управления печатью или для запрещения пропуска. Для вы-
ходного файла на перфокартах оно используется для выбора приемно-
го кармана. Имена реализации и соответствующие им действия были
приведены в табл. 4 в описании раздела оборудования.
Если употреблена фраза ДО ПРОДВИЖЕНИЯ, запись пишется до
того, как печатный лист продвигается в соответствии с описанными
выше правилами. Если употреблена фраза ПОСЛЕ ПРОДВИЖЕНИЯ,
вались пишется после того, как печатный лист будет продвинут в соот-
ветствии с описанными правилами.
Идентификатор-2 во фразе ПОСЛЕ УСТАНОВКИ (формат 2) дол-
жен быть именем буквенно-цифрового данного с шаблоном X. Допус-
тимые значения идентификатора-2 и их интерпретация приведены в
табл. 16.
Таблица 16
Вначение идентификатора» 2
Интерпретация
Пропуск одной строки
Пропуск двух строк
Пропуск трех строк
Запрещение пропуска
Прогон соответственно до кода 1—9
Прогон соответственно до кода 10, 11, 12
Выбор приемного кармана 1 нлн 2
Целое во фразе ПОСЛЕ УСТАНОВКИ должно быть без знака и
может быть равно 0, 1, 2 или 3. Интерпретация значений приведена в
табл. 17.
V Таблица 17
Значение Интерпретация
0 1 2 3 Прогон до кода 1 следующего листа Пропуск одной строки Пропуск двух строк Пропуск трех строк
. Если употреблена фраза ПОСЛЕ УСТАНОВКИ, запись пишется
после того, как печатный лист будет продвинут в соответствии с опи-
санными правилами.
Фраза В КОНЦЕ СТРАНИЦЫ позволяет выполнить указанный-
повелительный-оператор, когда печатающим устройством восприни-
мается код 12 на перфоленте управления печатью. Эта ситуация назы-
вается «концом листа». Файл печати должен быть определен как не-
блокированный файл с одной областью вывода. Каждый оператор
ПИСАТЬ в программе для этого файла должен продвигать печатный
лист на одну строку, иначе код 12 на перфоленте может оказаться необ-
наруженным, что может привести к непредвиденным результатам. При
возникновении ситуации «конец листа» выполнение повелительного
оператора происходит лишь после завершения операций записи и про-
тяжки. Фраза В КОНЦЕ СТРАНИЦЫ применима только к печатаю-
щему устройству.
Примечание. Операторы ВЫДАТЬ, ПЕЧАТАТЬ, ПИСАТЬ ПОСЛЕ
УСТАНОВКИ и ПИСАТЬ ПОСЛЕ ПРОДВИЖЕНИЯ выполняют протяжку
бумаги перед печатью, а оператор ПИСАТЬ без каКйх-либо фраз или о фразой
ДО ПРОДВИЖЕНИЯ — после печати. Поэтому смешанное использование та-
ких операторов в одной и той же программе может вызвать наложение печатае-
мых строк.
Для многотомных последовательных файлов, открытых как ВЫ-
ХОДНОЙ или ВХОДНОЙ-ВЫХОДНОЙ, при обнаружении конца
тома оператор ПИСАТЬ выполняет следующие операции:
а) стандартную процедуру конечной метки тома и процедуру про-
граммиста конечной метки-тома, если она была задана оператором ЙС-
ПОЛЬЗОВАТЬ в секции деклдратив. Порядок выполнения этих про-
цедур определяется оператором ИСПОЛЬЗОВАТЬ;
б) переключение томов;
в) стандартную процедуру начальной метки тома и процедуру про-
граммиста начальной метки тома, если она была задана оператором
ИСПОЛЬЗОВАТЬ. Порядок выполнения процедур определяется опе-
ратором ИСПОЛЬЗОВАТЬ.
Формат 3, как уже говорилось, применим только к файлам на маг-
нитных дисках с произвольным или последовательным доступом.
Перед выполнением оператора ПИСАТЬ формата 3 данное ФАКТИ-
ЧЕСКИЙ КЛЮЧ, КЛЮЧ ЗАПИСИ или НОМИНАЛЬНЫЙ КЛЮЧ
для этого файла должно быть установлено на нужное значение, кроме
файла с последовательной организацией, с которым никакой ключ не
связывается.
При последовательном доступе к последовательному, индексному,
относительному (только для ОС ЕС) и прямому (только для ОС ЕС)
файлу, открытому как ВЫХОДНОЙ, оператор ПИСАТЬ может ис-
пользоваться только^для создания файла.
При произвольном доступе к прямому файлу, открытому как ВХОД-
НОЙ-ВЫХОДНОЙ, действие оператора ПИСАТЬ зависит от поля
организации файла в имени реализации фразы НАЗНАЧИТЬ.
Если в поле организации указано А (только для ДОС ЕС) или D,
действие оператора ПИСАТЬ состоит в следующем:
оператор ПИСАТЬ обновляет запись,-если предыдущим операто-
ром ввода-вывода для этого файла был оператор ЧИТАТЬ для записи
с тем же значением данного ФАКТИЧЕСКИЙ КЛЮЧ;
оператор ПИСАТЬ добавляет новую запись к файлу, независимо
от того, дублируется существующая запись или нет, если предыдущий
оператор ЧИТАТЬ был для записи не с таким значением данного ФАК-
ТИЧЕСКИЙ КЛЮЧ.
138
Если в поле организации указано U (только для ДОС ЕС) или W,
оператор ПИСАТЬ добавляет новую запись к файлу, независимо от
того, дублируется еуществующая запись или нет. Для обновления
записи в этом случае нужно использовать оператор ОБНОВИТЬ.
Для файла с прямой организацией место для записи ищется на до-
рожке, определяемой значением данного ФАКТИЧЕСКИЙ КЛЮЧ.
Если на указанной дорожке нет доступного места, в операционной
системе ОС ЕС размещение записи выполняется в соответствии с па-
раметром LIMCT в управляющем операторе DD. В операционной си-
стеме ДОС ЕС программист может изменить номер дорожки, выполнив
декларативную процедуру ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТ-
НОЙ ПРОЦЕДУРЫ ОШИБКИ.
При выполнении оператора ПИСАТЬ для файла на магнитных дис-
ках управление передается повелительному оператору, указанному во
фразе ПРИ ОШИБКЕ КЛЮЧА, в следующих случаях:
а) если при последовательном доступе к файлу, открытому как
ВЫХОДНОЙ, делается попытка писать запись за границей файла;
б) если при произвольном доступе к файлу с прямой организацией,
открытому как ВХОДНОЙ-ВЫХОДНОЙ или ВЫХОДНОЙ, делает-
ся попытка добавить запись и выполняется одно из условий:
адрес дорожки, определяемый значением данного ФАКТИЧЕСКИЙ
КЛЮЧ, находится вне границ файла;
для файла с записями формата F (только для ОС ЕС) в первый байт
идентификатора записи, указанного в данном ФАКТИЧЕСКИЙ
КЛЮЧ, помещается стандартная константа НАИБОЛЫПЕЕ-ЗНАЧЕ-
НИЕ;
в) если при произвольном доступе к файлу с прямой организацией,
открытому как ВХОДНОЙ-ВЫХОДНОЙ, делается попытка обно-
вить запись, которая не найдена, или когда адрес дорожки, определяе-
мый значением данного ФАКТИЧЕСКИЙ КЛЮЧ, находится вне
границ файла;
г) если, при последовательном доступе к индексному файлу, от-
крытому как ВЫХОДНОЙ, значение данного КЛЮЧ ЗАПИСИ дуб-
лирует или меньше значения данного КЛЮЧ ЗАПИСИ предшествую-
щей записи;
д) если.при произвольном доступе к индексному файлу, открытому
как ВХОДНОЙ-ВЫХОДНОЙ, делается попытка добавить запись,
когда значение данного НОМИНАЛЬНЫЙ КЛЮЧ для добавляемой
ваписи дублирует содержимое поля КЛЮЧ ЗАПИСИ для какой-либо
из записей.
Транслятор Кобола (только для ОС ЕС) позволяет опускать фразу
ПРИ ОШИБКЕ КЛЮЧА. Если фраза ПРИ ОШИБКЕ КЛЮЧА опу-
щена и возникает ситуация недействительного ключа, выполняется
декларативная процедура ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ
ПРОЦЕДУРЫ ОШИБКИ, если она определена для файла. Если не
указана ни фраза ПРИ ОШИБКЕ КЛЮЧА, ни декларативная про-
цедура обработки ошибки для файла, ситуация недействительного
ключа игнорируется.
139
5.5.5 Оператор ОБНОВИТЬ
Оператор ОБНОВИТЬ используется для замены записи в файле
с прямой, индексной или (только для ОС ЕС) относительной организа-
цией указанной записью при условии действительности содержимого
связанного с ней данного ФАКТИЧЕСКИЙ КЛЮЧ или НОМИНАЛЬ-
НЫЙ КЛЮЧ.
Формат:
ОБНОВИТЬ имя-записи [ИЗ ПОЛЯ идентификатор]
ПРИ ОШИБКЕ КЛЮЙА повелительный-оператор
Перед выполнением оператора ОБНОВИТЬ должен быть выполнен
оператор ЧИТАТЬ, кроме прямых файлов о произвольным доступом
в ОС ЕС.
Файл должен быть открыт как ВХОДНОЙ-ВЫХОДНОЙ. Если для
файла указан ДОСТУП ПРОИЗВОЛЬНЫЙ, предварительно должно
быть установлено на нужное значение данное ФАКТИЧЕСКИЙ
КЛЮЧ или НОМИНАЛЬНЫЙ КЛЮЧ.
Имя-записи должно быть именем логической записи файла, описан-
ного в секции файлов раздела данных, и не может быть именем записи
сортируемого файла.
Фраза ИЗ ПОЛЯ делает оператор ОБНОВИТЬ эквивалентным
последовательности операторов:
ПОМЕСТИТЬ идентификатор В имя-записи,
ОБНОВИТЬ имя-записи ....
Идентификатор должен быть определен в секции рабочей памяти
или связи или в описании другого файла, не сортируемого.
При выполнении оператора ОБНОВИТЬ управление передается
повелительному-оператору, указанному во фразе ПРИ ОШИБКЕ
КЛЮЧА, в следующих случаях:
а) если при произвольном доступе к файлу с прямой организацией
запись не найдена или адрес дорожки находится вне границ файла;
б) если при произвольном доступе к файлу с индексной организа-
цией предыдущий оператор ЧИТАТЬ (только для ДОС ЕС) вызвал
ошибочную ситуацию;
в) если при произвольном доступе к файлу с относительной орга-
низацией (только для ОС ЕС) относительный номер записи находится
вне границ файла.
При обновлении файла с индексной организацией и произвольным
доступом в ОС ЕС условие недействительного ключа оператором ОБ-
НОВИТЬ не обнаруживается и результат выполнения оператора в этом
случае не предсказуем. Если условие ПРИ ОШИБКЕ КЛЮЧА воз-
никает при чтении записи индексного файла, такую запись обновлять
(перезаписывать) не следует.
Транслятор Кобола (только для ОС ЕС) позволяет опускать фразу
ПРИ ОШИБКЕ КЛЮЧА. Если эта фраза не указана и возникает си-
туация недействительного ключа, выполняется декларативная про-
цедура ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ
140
ОШИБКИ, если она определена для данного файла. Если не указаны
ни фраза ПРИ ОШИБКЕ КЛЮЧА, ни декларативная процедура об-
работки ошибки, ситуация недействительного ключа игнорируется.
Прд произвольном доступе к файлу в прямой организацией, от-
крытому как ВХОДНОЙ-ВЫХОДНОЙ, оператору ОБНОВИТЬ эк-
вивалентен оператор ПИСАТЬ, если он следует за оператором ЧИ-
ТАТЬ для той же записи.
5.5.6. Оператор ЗАКРЫТЬ
Оператор ЗАКРЫТЬ завершает обработку файлов или томов мно-
готомных файлов. Имеются три формата оператора ЗАКРЫТЬ.
Формат I:
ЗАКРЫТЬ
Г КАТУШКУ'
I ТОМ
имя-файла-1
'БЕЗ ПЕРЕМОТКИ'
G ЗАМКОМ
'КАТУШКУ'
ТОМ
имя-файла-2
'БЕЗ ПЕРЕМОТКИ'
G ЗАМКОМ
Формат 2 (только для ОС ЕС):
ЗАКРЫТЬ имя-файла-1
БЕЗ ПЕРЕМОТКИ ’
С ЗАМКОМ
ДИСПОЗИЦИЯ DISP
[имя-файла-2
'БЕЗ ПЕРЕМОТКИ
СЗАМКОМ
ДИСПОЗИЦИЯ DISP
(КАТУШКУ)
ЗАКРЫТЬ I Г имя-файла-1
Формат 3 (только для ОС ЕС):
Г БЕЗ ПЕРЕМОТКИ'
С ЗАМКОМ
G УСТАНОВКОЙ
(КАТУШКУ
{|том
'БЕЗ ПЕРЕМОТКИ'
ими-файла-2. 9 ЗАМКОМ
G УСТАНОВКОЙ
Каждое имя-файла должно быть определено статьей описания
файла в разделе данных и не может быть именем сортируемого файла.
Фразы . КАТУШКУ, БЕЗ ПЕРЕМОТКИ и (только для ОС ЕС)
ДИСПОЗЙЦИЯ применимы только к файлам на магнитной ленте, фра-
за ТОМ — только к последовательным файлам на магнитных дисках.
Чтобы показать действие разных вариантов оператора ЗАКРЫТЬ
применительно к разным носителям данных, все входные (выходные)
файлы разделим на следующие категории:
а) файл на устройстве одиночных записей, или файл, к носителю
данных которого неприменимы понятия перемотки, катушки, тома;
141
б) поеледовательный однотомный файл, или файл в последователь-
ным доступом, который целиком содержится на одном томе. На этой
томе может быть более одного файла;
в) последовательный многотомный файл, или файл в последова-
тельным доступом, -который может располагаться боЛее чем на одном
томе;
г) прямой однотомный файл, или файл с произвольным доступом,
который содержится на одном томе;
д) прямой многотомный файл, или файл с произвольным доступом,
который может располагаться более чем на одном томе.
Результаты выполнения-вариантов ЗАКРЫТЬ для каждой катего-
рии сведены в табл. 18. Описываемое в пояснениях к таблице действие
применимо к файлам, открытым как ВХОДНОЙ, ВЫХОДНОЙ и
ВХОДНОЙ-ВЫХОДНОЙ, если не оговорено противное.
Таблица 18
Вариант ЗАКРЫТЬ Категория файла
На устрой- стве оди- ночных записей Последо- вательный однотом- ный Последо- ватель- ный мно- готомный Прямой одно- томный Прямой много* ТОМНЫЙ
закрыть С с, G с, G, А к к
ЗАКРЫТЬ G ЗАМКОМ с, Е С, G, Е С, G, Ё, А К, Е К, Е
ЗАКРЫТЬ БЕЗ ПЕРЕМОТКИ X С, В С, В, А X X
ЗАКРЫТЬ ДИСПОЗИЦИЯ DISP (только для ОС ЕС) X С, J С, J, А X X
ЗАКРЫТЬ катушку X X F, G X X
ЗАКРЫТЬ КАТУШКУ С ЗАМ- КОМ X X F, D, G X X
ЗАКРЫТЬ КАТУШКУ БЕЗ ПЕРЕМОТКИ X X F, В X X
ЗАКРЫТЬ КАТУШКУ С УС- ТАНОВКОЙ (только для ОС X X F, Н X X
ЕС) ЗАКРЫТЬ ТОМ X X F X X
ЗАКРЫТЬ ТОМ С ЗАМКОМ X- X F, D X X
ЗАКРЫТЬ ТОМ С УСТАНОВ- КОЙ (только для ОС ЕС) X X F X X
А — предыдущие тома не подвергаются действию оператора ЗА-
КРЫТЬ. Все Предыдущие тома, кроме текущего, обрабатываются в
соответствии со стандартной процедурой переключения томов, если
только для них не выполнялся оператор ЗАКРЫТЬ КАТУШКУ или
ЗАКРЫТЬ ТОМ. Стандартная процедура переключения томов (толь-
ко для ОС ЕС) определяется режимом позиционирования в операторе
ОТКРЫТЬ;
В — текущая катушка не перематывается. Текущий том остается
в текущей позиции (только для ДОС ЕС) или позиционируется на ло-
гический конец файла на томе (только для ОС ЕС);
142
С — стандартное закрытие последовательного’ файла. Для файла,
открытого как ВХОДНОЙ или ВХОДНОЙ-ВЫХОДНОЙ, оно сос-
тоит в следующем:
а) если файл установлен в конце и есть запись конечной метки, вы-
полняется стандартная процедура обработки конечной метки и про-
цедура программиста обработки конечной метки, если она была задана
оператором ИСПОЛЬЗОВАТЬ, Затем выполняются системные проце-
дуры закрытия;
б) если файл установлен в конце и нет записи конечной метки, вы-
полняются системные процедуры закрытия;
в) если файл установлен не в конце, выполняются системные про-
цедуры закрытия. Никакой обработки конечной метки не производит-
ся. -Считается, что входной или входной-выходной файл находится
в конце, если был выполнен повелительный оператор, указанный во
фразе В КОНЦЕ, но не был выполнен оператор ЗАКРЫТЬ.
Для файла, открытого как ВЫХОДНОЙ и описанного с метками,
формируется запись конечной метки и записывается на носитель дан-
ных. Выполняются системные процедуры закрытия;
D — стандартный запрет катушки (тома). Это средство в опера-
ционной системе не обеспечивается и рассматривается как коммента-
рий;
Е — стандартный запрет файла. Транслятор обеспечивает невоз-
можность повторного открытия файла в процессе текущего выполне-
ния рабочей программы;
F — стандартное закрытие тома. Для файла, открытого как ВХОД-
НОЙ или ВХОДНОЙ-ВЫХОДНОЙ, оно состоит в следующем:
а) выполняется переключение томов;
б) выполняется стандартная процедура начальной метки тома и
процедура программиста начальной метки тома, если она была задана
оператором ИСПОЛЬЗОВАТЬ. Порядок выполнения этих процедур
определяется оператором ИСПОЛЬЗОВАТЬ;
в) делается доступной для чтения следующая запись данных на
новом томе.
Для файла, открытого как ВЫХОДНОЙ, стандартное закрытие
тома состоит в выполнении следующих процедур:
а) стандартной процедуры конечной метки тома и процедуры про-
граммиста конечной метки тома, если она была задана оператором ИС-
ПОЛЬЗОВАТЬ. Порядок выполнения процедур определяется опера-
тором ИСПОЛЬЗОВАТЬ;
б) переключения томов;
в) стандартной процедуры начальной метки тома и процедуры про-
граммиста начальной метки тома, если она была задана оператором
ИСПОЛЬЗОВАТЬ. Порядок выполнения процедур определяется опе-
ратором ИСПОЛЬЗОВАТЬ;
G — перемотка. Текущий том устанавливается в его начало;
Н — установка текущего тома (только для ОС ЕС), Текущий том
устанавливается, как указано в операторе ОТКРЫТЬ;
J — диспозиция DISP (только для ОС ЕС). Действия по установке
текущего тома, такие, как перемотка, разгрузка и др,, определяются
143
*
параметром DISP в управляющем операторе DD, связанном с файлом,
и не зависят от того, открывался файл с.фразой РЕВЕРСНО или нет;
К — стандартное закрытие прямого файла. Выполняется стандарт-
ная процедура обработки конечной метки и процедура программиста
обработки конечной метки, если она определена оператором ИСПОЛЬ-
ЗОВАТЬ. Для файла, открытого как ВЫХОДНОЙ или ВХОДНОЙ-
ВЫХОДНОЙ, метка записывается. Выполняются стандартные систем-
ные процедуры закрытия;
X — неправильная комбинация варианта ЗАКРЫТЬ и категории
файла. Могут быть непредвиденные результаты в рабочее время.
Файл может быть описан с вариантом НЕОБЯЗАТЕЛЬНОГО во
фразе ДЛЯ- Если в управляющем операторе ASSGN (только для ДОС
ЕС) для этого файла указан параметр IGN или в управляющем опера-
торе DD (только для ОС ЕС) указан параметр DUMMY или NULLFI-
LE и файл отсутствует, стандартная обработка конца файла не будет
выполняться.
Если для файла был выполнен оператор ЗАКРЫТЬ без фразы КА-
ТУШКУ или ТОМ, следующим выполнимым для этого файла опера-
тором ввода-вывода может быть только оператор ОТКРЫТЬ при усло-
вии, что файл не был закрыт С ЗАМКОМ.
5.5.7. Оператор ПРИНЯТЬ
Оператор ПРИНЯТЬ используется для ввода данных с системного
ввода SYSIPT (только для ДОС ЕС) или SYSIN (только для ОС ЕС),
или с пишущей машинки (CONSOLE).
ч Формат для ДОС ЕС:
fSYSIPT
ПРИНЯТЬ идентификатор (С CONSOLE
мнемоннческое-идоя ,
Формат для ОС ЕС:
ПРИНЯТЬ идентификатор [G
'SYS IN
CONSOLE ]
.мнемон ическое- имя
Идентификатор может быть групповым данным фиксированного
размера или элементарным буквенным, буквенно-цифровым, внешним
десятичным или внешним с плавающей точкой данным. Если иденти-
фикатор представляет групповое данное, то его элементарные данные
должны иметь использование ДЛЯ ВЫДАЧИ. Он не может быть ни-
каким из специальных регистров, кроме СЧЕТЧИК. Данные вводятся,
и соответствующее количество литер пересылается в зарезервиро-
ванную для идентификатора область основной памяти. Никакого ре-
дактирования входных данных или проверки на ошибки при этом не
делается.
144
Если оператором ПРИНЯТЬ используется то же самое устройство
ввода, что и оператором ЧИТАТЬ, результаты могут быть непредви-
денными.
.Мнемоническое-имя может быть связано в SYSIPT (только для ДОС
ЕС), S YS1N (только для ОС ЕС) и CONSOLE. Оно должно быть опреде-
лено в параграфе СПЕЦИАЛЬНЫЕ-ИМЕНА раздела оборудования.
Если мнемоническое-имя связано о CONSOLE или указана фраза
С CONSOLE, размер принимаемого данного не должен превышать
255 литер в ДОС ЕС или 114 литер в ОС ЕС. При выполнении такого
оператора ПРИНЯТЬ выполняются следующие действия:
а) на пишущую машинку выдается сообщение «AWAITING REPLY»
(ожидание ответа) с кодом сообщения, сгенерированным операцион-
ной системой;
б) выполнение приостанавливается, пока Управляющая програм-
ма не получит ответного сообщения, после чего выполнение операто-
ра ПРИНЯТЬ возобновляется и принятые данные пересылаются в
указанный идентификатор. Данные устанавливаются в принимающем
поле слева, независимо от шаблона. Если поле не заполнено целиком,
младшие позиции данного могут'содержать неправильную информа-
цию.
Если мнемоническое-имя связано е системным вводом или указана
фраза С SYSIPT (только в ДОС ЕС) или SYSIN (только в ОС ЕС), пред-
полагается, что размер входной записи равен 80. Если размер прини-
маемого данного меньше 80 литер, его значение должно появляться
в качестве первых символов записи. Если размер принимаемого дан-
ного больше 80 литер, будет читаться столько записей, сколько необ-
ходимо для того, чтобы заполнить область основной памяти, зарезер-
вированную для принимаемого данного.
Если фраза С не указана в операторе, предполагается SYSIPT в
ДОС ЕС и SYSIN в ОС ЕС.
5.5.8. Оператор ВЫДАТЬ
Оператор ВЫДАТЬ используется для выдачи данных на одно из
устройств вывода: пишущую машинку (CONSOLE), системный пер-
форатор (SYSPUNCH, SYSPCH), системную печать (SYSLST в ДОС
ЕС, SYSOUT в ОС ЕС).
Формат для ДОС ЕС:
{литерал-1
идентификатор-!
литерал-2
идентнфикатор-2
[НА
CONSOLE
SYSPCH
SYSPUNCH
SYSLST
мнемон ическое- имя
145
Формат для ОС ЕС:
ВЫДАТЬ
(литерал-3 )
(и дентификатор-1)
литерал-2
идентификатор-2
[НА
CONSOLE
SYSPUNCH
SYSOUT
мнемоническое-имя
Мнемоническое-имя должно быть определено в параграфе СПЕ-
ЦИАЛЬНЫЕ-ИМЕНА раздела оборудования и может быть связано
с CONSOLE, SYSPUNCH, SYSPCH (только для ДОС ЕС), SYSLST
(только для ДОС ЕС) или SYSOUT (только для ОС ЕС).
Если фраза НА не указана, предполагается SYSLST для ДОС ЕС
и SYSOUT для ОС ЕС.
Размер выводимой записи считается равным максимальному раз-
меру физической записи для данного устройства. Для пишущей ма-
шинки (CONSOLE) он равен 100, для системной печати — 120, если
только для ОС ЕС другой размер записи не указан в управляющем
операторе DD (подпараметр LRECL параметра DCB), для системного
перфоратора—72. При выводе на системный перфоратор в позициях
73—80 перфорируется имя программы из параграфа ПРОГРАММА»
Если суммарное количество литер всех операндов оператора меньше
максимума (или 72 для системного перфоратора), оставшиеся позиции
дополняются пробелами. Если больше, оставшиеся операнды про-
должаются в следующей записи. Выводится столько записей, сколько
необходимо, чтобы выдать все указанные операнды. Операнды, не
вмещающиеся целиком в записи, при этом могут разрываться между
записями.
Идентификаторы, описанные с фразой ДЛЯ ВЫЧИСЛЕНИЙ,
ДЛЯ ВЫ ЧИСЛЕ НИЙ-1, ДЛЯ ВЫЧИСЛЕНИЙ-2 или ДЛЯ ВЫЧИС-
ЛЕНИЙ-3 перед выводом автоматически преобразуются во внешний
формат следующим образом:
а) внутренние десятичные и двоичные данные преобразуются во
внешние десятичные. Значения со знаком выводятся с надпечаткой
(дополнительной пробивкой) в младшей позиции;
б) внутренние данные с плавающей точкой преобразуются во внеш-
ние с плавающей точкой;
в) все остальные данные не требуют преобразования.
Например, если три внутренних десятичных данных имеют значе-
ния —34, +34 и 34, они будут выданы соответственно в виде ЗМ, 3D,
34.
Идентификатор не может быть никаким из специальных регистров,
кроме регистра СЧЕТЧИК.
Если в качестве операнда указана стандартная константа, выдает-
ся только одно повторение константы.
О совместном использовании операторов ВЫДАТЬ и ПИСАТЬ в
одной и той же программе см. примечание в п, 5.5,4,
146
5.5.9. Оператор ИСПОЛЬЗОВАТЬ
Оператор ИСПОЛЬЗОВАТЬ относится к типу декларативных, а не
процедурных операторов и используется для идентификации процеду-
ры как декларативной и определения типа декларативной процедуры.
Имеются 3 формата оператора ИСПОЛЬЗОВАТЬ, определяющих один
из типов декларативных процедур: процедуры обработки меток, про-
цедуры обработки ошибок ввода-вывода и процедуры генератора от-
четов.
Формат 1:
(ДО
ИСПОЛЬЗОВАТЬ J—
------------- ПОСЛЕ
СТАНДАРТНОЙ ПРОЦЕДУРЫ
'НАЧАЛЬНОЙ ГКАТУШКИ
КОНЕЧНОЙ МЕТКИ ФАЙЛА
-------- J Т0МА
ДЛЯ
’имя-файла-1 [имя-файла-2] ....
ВХОДНЫХ
ВЫХОДНЫХ
. ВХОДНЫХ-ВЫХОДНЫХ
Формат 2:
ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ
имя-файла-1 [имя-файла-2] ...
имя-файла-3 ПОЛУЧАЯ имя-данного-1 1има-данного-2]
для ВХОДНЫХ
ВЫХОДНЫХ
ВХОДНЫХ-ВЫХОДНЫХ
Формат 3:
ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ идентификатор
Формат 1 используется для определения декларативной процедуры
обработки меток, формат 2 — для определения процедуры обработ-
ки ошибок, а формат 3 — для определения процедуры генератора от-
четов. Формат 3 оператора ИСПОЛЬЗОВАТЬ будет описан в главе 9.
Оператор ИСПОЛЬЗОВАТЬ может появиться только в декларатив-
ной части раздела процедур, которая начинается с заголовка ДЕКЛА-
РАТИВЫ и заканчивается словами КОНЕЦ ДЕКЛАРАТИВ. Опе-
ратор ИСПОЛЬЗОВАТЬ должен следовать за заголовком секции в
декларативной части раздела процедур и заканчиваться точкой. Ос-
тальная часть секции должна состоять из одного или более парагра-
фов, определяющих процедуры, которые должны выполняться, когда
возникает соответствующая ситуация. Декларативная секция закан-
чивается при появлении следующего заголовка секции о оператором
ИСПОЛЬЗОВАТЬ или в конце декларативной части раздела проце-
дур-
147
Вход в декларативную секцию обработки меток проиоходит авто-
матически при выполнении оператора ОТКРЫТЬ и (или) ЗАКРЫТЬ
для соответствующего файла или при переключении томов. Вход в
декларативную процедуру обработки ошибок ввода-вывода происхо-
дит при возникновении ошибки ввода-вывода при выполнении опера-
торов ЧИТАТЬ, ПИСАТЬ, ОБНОВИТЬ, ПОДВЕСТИ для соответст-
вующего файла и (только для ОС ЕС) при возникновении ситуации не-
действительного ключа, если в операторе ввода-вывода не была указа-
на фраза ПРИ ОШИБКЕ КЛЮЧА.
Выход из декларативной секции вставляется' транслятором за по-
следним оператором секции аналогично тому, как вставляется выход
из области действия оператора ВЫПОЛНИТЬ. Если есть необходи-
мость выйти из декларативной секции в нескольких точках, все ло-
гические пути в этой секции должны вести к общей точке выхода —
параграфу с предложением ВЫЙТИ. Если выход из декларативной
секции происходит через последний оператор секции, управление воз-
вращается к оператору, следующему за тем оператором, который выз-
вал вход в декларативную секцию.
В декларативных процедурах не должно быть обращений к не-
декларативным процедурам и, наоборот, в недекларативной части раз-
дела процедур не должно быть обращений к процедурам в декларатив-
ной части. Исключение составляет оператор ВЫПОЛНИТЬ, который
может обращаться к декларативным процедурам, и оператор ПЕРЕЙ-
ТИ, который может обращаться к недекларативным процедурам из
декларативной процедуры обработки ошибок ввода-вывода.
В декларативных процедурах не должны выполняться никакие опе-
раторы ввода-вывода для обрабатываемого файла. Исключение состав-
ляет оператор ЗАКРЫТЬ в процедурах, обработки ошибок ввода-вы-
вода.
Формат 1 оператора ИСПОЛЬЗОВАТЬ позволяет программисту
определить процедуры для формирования или проверки стандартных
меток пользователя или нестандартных меток. Эти метки описывают-
ся в статье описания файла как записи данных, а их имена указывают-
ся во фразе МЕТКИ этой статьи с вариантом имя-данного. Тип меток,
которые должны создаваться или проверяться для файла, указывается
разновидностями оператора ИСПОЛЬЗОВАТЬ. Фраза ДО указывает,
что должен обрабатываться файл с нестандартными метками, а фраза
ПОСЛЕ — со стандартными метками пользователя. Стандартным мет-
кам пользователя всегда предшествуют стандартные системные метки.
Для файлов с нестандартными метками декларативные процедуры
' обработки меток выполняются перед выполнением системных процедур
открытия (закрытия) файла, а для "файлов со стандартными метками
пользователя — после выполнения системных процедур. Для вход-
ных-выходных файлов системные процедуры выполняются также и
после выполнения декларативной процедуры.
Фраза НАЧАЛЬНОЙ или КОНЕЧНОЙ означает, что следующие
за оператором ИСПОЛЬЗОВАТЬ процедуры будут выполняться соот-
ветственно для начальных или конечных меток, Если не указана ни
148 -
одна из этих фраз, указанные процедуры будут выполнятьвя и для
начальных, и для конечных меток.
Фраза ФАЙЛА указывает, что процедуры должны выполняться
для меток файла, а фразы КАТУШКИ или ТОМА — для меток тома.
Фраза КАТУШКИ применима только для файлов на магнитной лейте,
а фраза ТОМА — для последовательных файлов на магнитных дисках.
Для файлов с произвольным доступом может применяться только
фраза ФАЙЛА. Если же указано. ТОМА, КАТУШКИ или ФАЙЛА,
процедуры выполняются и для меток файла, и для меток тома.
Если используется фраза имя-файла, процедуры выполняются
только для указанного файла. Статья описания файла в этом случае
не должна содержать фразу МЕТКИ ОПУЩЕНЫ. Имя-файла не долж-
но быть именем сортируемого файла. Одно и то же имя-файла может
появиться в нескольких разновидностях формата 1. Однако они не
должны требовать одновременного выполнения нескольких деклар а-
тив.
Если указана фраза ВХОДНЫХ, ВЫХОДНЫХ или ВХОДНЫХ-
ВЫХОДНЫХ, декларативные процедуры выполняются для всех фай-
лов в программе, которые открываются соответственно как входные,
выходные или входные-выходные. При этом нет необходимости уточнять
в декларативных процедурах имена общих элементов меток именах •
файла. Общим элементом может быть любое элементарное данное, ко- ..
торое описано в каждой записи метки, но не появляется ни в одной „
записи данных этой программы. Такие данные должны иметь одинако- -
вые описания и положение относительно начала каждой записи метки. ..
Если указана фраза ВХОДНОЙ или ВЫХОДНОЙ и соответственно
входной или выходной файл описан с фразой МЕТКИ ОПУЩЕНЫ,
процедуры ИСПОЛЬЗОВАТЬ для такого файла не выполняются.
Для ОС ЕС создание и проверка нестандартных меток файла в де-
кларативных процедурах возможны только при наличии в операцион-
ной системе специальной программы обработки нестандартных меток.
Эта программа должна быть написана на- вычислительном центре,
эксплуатирующем систему, и включена в операционную систему во
время ее генерации. Все сказанное ниже об обработке нестандартных
меток справедливо для ОС ЕС только при наличии в системе такой
программы.
В декларативной процедуре программист должен выполнять толь-
ко формирование или проверку меток. Физическое чтение или запись
меток обеспечивается системой при входе в декларативную секцию
(для входных файлов) или выходе из декларативной секции через по-
следний оператор секции (для выходных файлов).
Если требуется записать или прочитать более одной метки, выход
издекларативнойсекции должен производиться по оператору ПЕРЕЙ-
ТИ К СЛЕДУЮЩЕЙ МЕТКЕ до тех пор, пока не будут созданы или
прочитаны все требуемые метки.
При выходе из секции посредством этого оператора операционной
системой будет выполняться одно из следующего:
а) запись текущей начальной или конечной метки и повторный
вход в начало декларативной секции для создания очередной метки.
149
Сформировав последнюю метку, программиет должен обеспечить вы-
ход из декларативной секции через последний оператор секции;
б) чтение очередной начальной или конечной метки пользователя
и повторный вход в начало декларативной секции для проверки метки.
Если файл имеет стандартные метки пользователя, повторный' вход
в секцию произойдет лишь в случае, если еще есть необработанные
метки. Поэтому в этом случае нет необходимости обеспечивать 4
выход через последний оператор секции. В случае нестандартных ме-
ток операционная система не может определить количество меток. По-
этому для завершения обработки нестандартных меток программист
должен обеспечить выход' из декларативной секции выполнением по-
следнего оператора секции.
Если оператор ПЕРЕЙТИ К СЛЕДУЮЩЕЙ МЕТКЕ не использует-
ся, повторного входа в декларативную секцию для обработки меток
не будет.
При чтении нестандартных начальных меток сам программист дол-
жен позаботиться также и о чтении ленточных марок, ограничиваю-
щих метки. Для этого может использоваться выход посредством опе-
ратора ПЕРЕЙТИ К СЛЕДУЮЩЕЙ МЕТКЕ, а факт чтения ленточ-
ной марки должен устанавливаться в декларативной секции. Оконча-
тельный выход из декларативной секции может быть сделан только
после того, как файл будет установлен непосредственно перед первой
записью данных. Если для входного файла нестандартная метка не-
корректна (только для ОС ЕС), программист должен поместить нену-
левое значение в специальный регистр КОД-ВОЗВРАТА-МЕТКИ.
После обработки нестандартной конечной метки (только в ОС ЕС)
операционная система по информации в управляющем операторе DD
определяет, закончился файл на текущем томе или же требуется чи-
тать следующий том. Если текущий том последний, то выполняется
повелительный оператор, указанный во фразе В КОНЦЕ оператора
ЧИТАТЬ. Если текущий том не последний, то происходит переключе-
ние томов, обрабатываются метки тома и читается первая запись.
При записи нестандартных начальных меток никаких ленточных
марок операционной системой не записывается. Ленточная марка за-
писывается только за последней нестандартной конечной меткой на
каждой катушке.
Формат 2 оператора ИСПОЛЬЗОВАТЬ позволяет программисту
определить свои процедуры обработки ошибок ввода-вывода в допол-
нение к системным' процедурам.
Если используется фраза имя-файла-1 (или имя-файла-2), декла-
ративные процедуры выполняются при возникновении ошибки ввода-
вывода во время выполнения операторов ЧИТАТЬ, ПИСАТЬ, ОБНО-
ВИТЬ или ПОДВЕСТИ только для этого файла. Одно и то же имя фай-
ла не может быть указано явно или неявно более чем в одном операторе
ИСПОЛЬЗОВАТЬ формата 2.
Если указана фраза ВХОДНЫХ, ВЫХОДНЫХ или ВХОДНЫХ-
ВЫХОДНЫХ, декларативные процедуры выполняются при возник-
новении ошибки для всех файлов в программе, открытых соответствен-
но как входные, выходные или входные-выходные.
150
к
Если употреблена фраза ПОЛУЧАЯ, имя-данного-1 используется
для отражения ошибочной ситуации, вызвавшей вход в декларативу
ошибки. Имя-данного-1 для ДОС ЕС должно быть определено в сек-
ции рабочей памяти как внешнее десятичное данное длиной 8 байт.
Значение 1 в соответствующем байте этого данного отражает опреде-
ленную ошибку ввода-вывода в зависимости от организации обрабаты-
ваемого файла, как показано в табл. 19.
Таблица 19
Организация файла
| Номер 1 байта иидексио* последовательная прямая последовательная
1 Ошибка на магнитном диске Ошибочное данное в об- ласти счетчика Ошибка четности
2 Запись неправильной длины Запись непр авильиой длины Запись неправильной длины
3 Область основных дан- ных заполнена Нет места на дорожке
4 Индекс цилиндров за- полнен Ошибочное данное в об- ласти ключа или данных
5 Главный индекс запол- нен — —
6 Область переполнения заполнена — —
7 — — *-
8 - . -
Имя-данного-1 для ОС ЕС должно быть именем данного длиной
136 байт, описанного в секции рабочей памяти. Значение этого данного
идентифицирует возникшую ошибку и поставляет некоторую допол-
нительную информацию, как показано в табл. 20. Там, где не оговоре-
но противное, информация представлена в коде ДКОИ.
Если не было передачи данных, байты 12—13 будут содержать про-
белы.
Вход в декларативную секцию происходит в случае, если возни-
кает одна из ошибок, перечисленных в табл. 21, причем вход по не-
действительному ключу происходит, если в операторе ввода-вывода от-
сутствует фраза ПРИ ОШИБКЕ КЛЮЧА.
151
Таблица 20
Номер байта Информация
1—12 13-14 Используется системой Число байт в ошибочном блоке (в двоичном представлен нии) или пробелы
15—49 50 51—58 59 60—67 ' 68 69—71 72 73-74 75 76—83 84 85—90 91 92—106 107 108—128 Пробелы Запятая Имя задания Запятая Имя шага задания Запятая Адрес устройства Запятая Тип устройства Запятая Имя DD .• Запятая Предпринимаемая операция Запятая - Описание ошибки Запятая Информация в этих байтах зависит от типа устройства, нан значенного файлу, и содержит следующее! для устройств одиночных запвсей: 108—121—звездочки, 122 — запятая, 123—128—метод доступа; для НМЛ: 108—114 — счетчик блоков (в десятичном представлении), 115 — запятая,
116 — 120 — метод доступа, 121—128 — пробелы; для НМД: z 108—121 — последний фактический адрес в виде BBCCHHR (в шестнадцатеричном представлении), 122 — запятая, 123—128 — метод доступа
128—136 Используются системой
Если ошибочная ситуация связана с недействительным ключом,
выполнение программы может быть продолжено корректировкой зна-
чения ключа. Если возникает неисправимая ошибка ввода, можно по-
пытаться обойти блок с ошибкой чтением следующего блока. В боль-
шинстве остальных случаев возможности продолжения выполнения
программы ограничены оператором ЗАКРЫТЬ, который может на-
ходиться как в декларативной, так и в недекларативной части програм-
мы.
Если во фразе ПОЛУЧАЯ указано имя-данного-2, при возникнове-
нии ошибки во время выполнения оператора ЧИТАТЬ в поле этого
данного будет помещен ошибочный блок (при условии, что данные бы-
ли переданы). Имя-данного-2 должно быть определено в секций ра-
бочей памяти или связи и описывать поле, достаточно большое, чтобы
вместить наибольший блок именн-файла-3.
152
Таблица 21
Организация файла Недействительный ключ Ошибка ввода-вывода
Последовательная Нет места для записи Ошибка ввода-вывода. Неправильный запрос
Прямая, относительная Адрес вне участка. Попытка добаввть за- пись с ключом, начина- ющимся с 'FF' Неправильный запрос. Запись не найдена. Нет места для записи. , Неисправимая ошибка вжн да-вывода. Неисправимая ошибка (в* ввода-вывода)
Индексная Невозрастающая по- следовательность клю- чей. Дублирующийся ключ Запись не найдена Нет места для записи. Неисправимая ошибка ввсн да-вывода. Недоступный блок. Неправильный запрос
6. ПРИМЕРЫ ПРОГРАММ
6.1. СОЗДАНИЕ ПРЯМОГО ФАЙЛА С ФАКТИЧЕСКОЙ
АДРЕСАЦИЕЙ ДОРОЖКИ (ТОЛЬКО ДЛЯ ДОС ЕС)
В этой программе создается прямой файл методом произвольного
доступа с использованием фактической адресации дорожки. При
создании такого файла в разделе оборудования обязательна фраза
ФАКТИЧЕСКИЙ КЛЮЧ. Адрес дорожки вычисляется методом ран-
домизации по остатку (см. п. 1.2.2). В примере предполагается, что
для размещения файла на магнитных дисках требуется 20 дорожек,
начиная с дорожки 0 цилиндра 100. Данное «артикул» из входного
файла на перфокартах, используемое для получения адреса, делится
на 19; остаток от деления дает адрес дорожки, изменяющийся в диа-
пазоне от 0 до 18. Для получения фактического адреса добавляется
смещение 1000 (начало участка). Так как наибольший возможный оста-
ток— 18, а смещение — 1000, то основная область файла заканчивается
на дорожке 8 цилиндра 101. Дорожку 9 цилиндра 101 отведем для
записей переполнения (синонимов). Если запись рандомизируется на
дорожку, которая уже. заполнена, возникает ситуация синонимиче-
ского переполнения. В этом случае управление передается деклара-
тивной процедуре обработки ошибок, которая обёспечивает следую-
щее:
а) любая запись, которая не помещается на какой-либо дорожке
цилиндра 100, будет записана в первой свободной позиции следующей
дорожки этого цилиндра;
153
б) если весь цилиндр 100 заполнен, записи переполнения буду?
записаны на 9-й дорожке 101-го цилиндра;
в) если вся дорожка переполнения заполнена, выполнение програм-
мы прекращается.
Идентификатором записи на дорожке является данное «ключ-
записи», в которое помещается значение данного «наименованием из
входной записи «накладная».
Примечание. При относительной адресацйи адрес записи получа-
ется аналогичным образом с той лишь разницей, что остаток от деления следует
использовать в качестве идентификатора дорожки, ие добавляя смещение.
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, sozdpf.
АВТОР.НИИ.
ДАТА-НАПИСАНИЯ. сентябрь 1976г:.
* иллюстрирует создание прямого файла с фактической адресацией
• дорожки.
РАЗДЕЛ ОБОРУДОВАНИЯ.
СЕКЦИЯ КОНФИГУРАЦИИ.
ИСХОДНАЯ-МАШИНА. ЕС-1022.
РАБОЧАЯ-МАШИНА. ЕС-1022.
СЕКЦИЯ ВВОДА-ВЫВОДА.
, УПРАВЛЕНИЕ-ФАЙЛАМИ.
ДЛЯ файл-диск НАЗНАЧИТЬ SYS005-DA-5052-A-DISK
ДОСТУП ПРОИЗВОЛЬНЫЙ
ФАКТИЧЕСКИЙ КЛЮЧ факт-кл.
ДЛЯ файл-карт НАЗНАЧИТЬ SYS006-UR-6012-3.
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ ФАЙЛОВ.
ОФ файл-диск МЕТКИ СТАНДАРТНЫ,
01 запись-счета.
02 артикул Ш Х(3).
02 наименование Ш Х(29).
02 количество Ш 39(6) ДЛЯ ВЫЧ ВЫДЕЛЕНО.
02 цена Ш 3999Т99 ДЛЯ ВЫЧ ВЫДЕЛЕНО
02 сумма-д Ш 39(9)Т99 ДЛЯ ВЫЧ ВЫДЕЛЕНО.
02 заказ Щ 39(3) ДЛЯ ВЫЧ ВЫДЕЛЕНО.
ОФ файл-карт МЕТКИ ОПУЩЕНЫ.
01 накладная.
02 артикул Ш Х(3).
02 наименование Ш Х(29). •
02 количество Ш 39(6). .
02 цена Ш 3999Т99.
02 сумма-д Ш 39(9)Т99.
02 заказ Ш 39(3).
' 02 ЗАПОЛНИТЕЛЬ Ш Х(23).
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
77 артикул-выч Ш 39(5) ДЛЯ ВЫЧ.
77 частное Ш 39(4) ДЛЯ ВЫЧ.
01 адрес 1 Ш 9(4).
01 адрес 2 ПЕРЕОПРЕДЕЛЯЕТ адрес!.
02 ном-цил Ш 999.
02 ном-дор Ш 9.
01 адрес-записи.
02 м Ш 3999 ДЛЯ ВЫЧ ЗНАЧ 0.
02 вв Ш 39 ДЛЯ ВЫЧ ЗНАЧ 0.
02 сс Ш 3999 ДЛЯ ВЫЧ. J
02 нн Ш 39 ДЛЯ ВЫЧ.
154
02 г Ш X ЗНАЧ НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ.
02 ключ-записи Ш Х(29).
01 адрес-з ПЕРЕОПРЕДЕЛЯЕТ адрес-записи.
02 ЗАП Ш X.
02 факт-кл Ш Х(37).
01 код-ошибки.
02 ЗАП Ш 99 ЗНАЧ НУЛЬ,
02 ош Ш 9 ЗНАЧ НУЛЬ.
02 ЗАП Ш 9(5) ЗНАЧ НУЛЬ.
РАЗДЕЛ ПРОЦЕДУР.
ДЕКЛАРАТИВЫ.
СЕ КЦЙЯ обр-ош.
ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ
ДЛЯ файл-диск, ПОДУЧАЯ код-ошибки.
анализ-ошибки.
ПЕЧАТАТЬ G ИМЕНЕМ код-ошибки.
ЕСЛИ ош = 1 ПЕРЕЙТИ К синоним
ИНАЧЕ ВЫДАТЬ 'другая стандартная ошибка', ключ-записи.
синоним.
ЕСЛИ сс =101 И нн = 9 ВЫДАТЬ 'область заполнена' ПЕРЕЙТИ
К конец-работы.
ЕСЛИ сс = 101 ПОМЕСТИТЬ 9 В нн ПЕРЕЙТИ К записывание.
ЕСЛИ нн = 9 ПЕРЕЙТИ К кон-цил. *
СЛОЖИТЬ 1 С нн ПЕРЕЙТИ К записывание.
кон-цил.
ПОМЕСТИТЬ 101 В сс, ПОМЕСТИТЬ 9 В нй
ПЕРЕЙТИ К записывание.
КОНЕЦ ДЕКЛАРАТИВ.
начало.
ОТКРЫТЬ ВХОДНОЙ файл-карт, ВЫХОДНОЙ файл-диск.
чтение.
ЧИТАТЬ файл-карт В КОНЦЕ ПЕРЕЙТИ К конец-работы.
ПОМЕСТИТЬ артикул ИЗ накладная В артикул-выч.
РАЗДЕЛИТЬ артикул-выч на 19 ПОЛУЧАЯ
частное ОСТАТОК адрес!.
СЛОЖИТЬ 1000 С адрес!.
ПОМЕСТИТЬ наименование ИЗ накладная В ключ-записи.
ПОМЕСТИТЬ ном-цил В сс.
ПОМЕСТИТЬ ном-дор В нн.
ПОМЕСТИТЬ СООТВЕТСТВЕННО накладная В запись-счета.
записывание.
ПИСАТЬ запись-счета ПРИ ОШИБКЕ КЛЮЧА -
ВЫПОЛНИТЬ ошибка. ПЕРЕЙТИ К чтение.
конец-работы.
ЗАКРЫТЬ файл-карт, файл-диск
ВЫДАТЬ 'конец работы' НА SYSLST.
ОСТАНОВИТЬ РАБОТУ.
ошибка. •
ВЫДАТЬ 'ошибочный клю1?, ключ-записи НА SYSLST.
6.2. ОБНОВЛЕНИЕ ФАЙЛА С ИНДЕКСНОЙ ОРГАНИЗАЦИЕЙ
В этой программе иллюстрируется обновление индексного файла
методом прямого доступа. Обновляются те записи индексного файла,
для которых НОМИНАЛЬНЫЙ КЛЮЧ, полученный из записи вход-*
ного файла «карт-зап», совпадает со значением КЛЮЧ ЗАПИСИ.
Если требуемой записи в индексном файле нет, выдается сообщение.
155
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, correct.
АВТОР. Иванов.
ПРЕДПРИЯТИЕ. НИИ.
РАЗДЕЛ ОБОРУДОВАНИЯ.
СЕКЦИЯ КОНФИГУРАЦИИ.
ИСХОД НАЯ-МАШИНА. ЕС-1022.
РАБОЧАЯ-МАШИНА. ЕС-1022.
СЕКЦИЯ ВВОДА-ВЫВОДА.
УПРАВЛЕНИЕ-ФАЙЛАМИ.
ДЛЯ карт-файл НАЗНАЧИТЬ SYS005-UR-6012-S. * **
ДЛЯ справ-файл НАЗНАЧИТЬ SYS006-DA-5052-1-SPRAV ••
ДОСТУП ПРОИЗВОЛЬНЫЙ
НОМИНАЛЬНЫЙ КЛЮЧ раб
КЛЮЧ ЗАПИСИ таб-ном ИЗ строка-д.
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ ФАЙЛОВ.
ОФ карт-файл МЕТКИ ОПУЩЕНЫ.
01 карт-зап.
' 02 зап-карт,
03 таб-ном Ш 9(4). . -
03 ном-лаб Ш 9(3).
03 фио Ш Х(20).
03 зарплата Ш 9(3)Т99 ПОВТОРЯЕТСЯ 3 РАЗА.
02 ЗАПОЛНИТЕЛЬ Ш Х(38).
ОФ справ-файл МЕТКИ СТАНДАРТНЫ.
01 диск-зап.
02 код-удал НТ X.
02 строка-д.
03 таб-ном Ш 9(4).
03 ном-лаб Ш 9(3).
03 фио Ш Х(20).
03 зарплата Ш 9(3)Т99 ПОВТОРЯЕТСЯ 3 РАЗА.
02 ЗАП Ш Х(37).
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
77 раб Ш 9(4).
РАЗДЕЛ ПРОЦЕДУР.
ОТКРЫТЬ ВХОДНОЙ карт-файл,
ВХОДНОЙ-ВЫХОДНОЙ справ-файл.
чтен. ЧИТАТЬ карт-файл В КОНЦЕ ПЕРЕЙТИ К завершение.
ПОМЕСТИТЬ таб-ном ИЗ карт-зап В раб.
ЧИТАТЬ справ-файл ПРИ ОШИБКЕ КЛЮЧА
ВЫДАТЬ 'табельный номер', раб,
t 'не найден в справочнике' ПЕРЕЙТИ к чтен.
ПОМЕСТИТЬ зап-карт В строка-д.
ВЫДАТЬ зап-карт.
ОБНОВИТЬ дйск-зап
ПРИ ОШИБКЕ КЛЮЧА ПЕРЕЙТИ К завершение,
ПЕРЕЙТИ К чтен.
завершение. ЗАКРЫТЬ карт-файл, справ-файл
ВЫДАТЬ 'файл скорректирован'
ОСТАНОВИТЬ РАБОТУ.
* Только для ДОС ЕС. Имя реализации фразы НАЗНАЧИТЬ для ОС ЕС
может быть, например, таким: UR-6012-S-CARD
** Только для ДОС ЕС. Имя реализации фразы НАЗНАЧИТЬ для ОС ЕС
может быть, иапрнмер, таким; DA-5052-I-SPRAV, .
2
Часть
ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ
7. ОБРАБОТКА ТАБЛИЦ
Средства обработки таблиц предоставляют программисту удобный
способ описания и обработки таблиц и списков повторяющихся дан-
ных.
Таблица — это совокупность однородных, идентично опи-
сываемых, подряд расположенных данных (элементов таблицы), пред-
ставляющих, например, строки и (или) столбцы документа. Основным
средством описания таблиц в программе на Коболе является фраза
ПОВТОРЯЕТСЯ в статье описания данных. Таблица может иметь до
трех измерений.
Местоположение элемента в таблице однозначно определяется
набором из одного, двух или трех целых чисел — индексов, ко-
торые обеспечивают^возможность непосредственного доступа к любому
элементу таблицы.
Индекс может быть представлен числовым литералом, именем
данного (в том числе специальным регистром СЧЕТЧИК) и именем
ийдекса. Индексы должны задаваться при любом обращении к отдель-
ным элементам таблицы.
Элемент в таблице можно искать, задавая значение компоненты
элемента таблицы. Данное, по значению которого происходит поиск
элемента, называется к л ю ч о м. Ключом для поиска может служить
любое данное, входящее в состав элемента таблицы. Поиск можно
сделать более эффективным, если элементы в таблице расположить
в порядке возрастания или убывания ключа, используемого для
поиска.
157
7.1. СРЕДСТВА ОПИСАНИЯ И ОБРАБОТКИ ТАБЛИЦ
В РАЗДЕЛЕ ДАННЫХ
7.1.1. Фраза ПОВТОРЯЕТСЯ
Фраза ПОВТОРЯЕТСЯ устраняет необходимость описывать по
вторяющиеся данные в отдельных статьях, так как позволяет указать
сколько раз данные с идентичным форматом- повторяются в записи.
Формат:
ПОВТОРЯЕТСЯ [ОТ целое-1 ДО] целое-2 {рдзд }
[В ЗАВИСИМОСТИ ОТ имя-данного-1]
[ВОЗРАСТАНИЮ] , , .
[ПО < УБЫВАНИЮ-------1 КЛЮЧА имя-данного-2 [имя-данного-3] ...] ...
[ИНДЕКСИРУЕТСЯ имя-иидекса-1 [имя-индекса-2] ...]
Если в статье описания данного наряду с фразой ПОВТОРЯЕТ-
СЯ содержатся другие фразы, то они распространяются на каждск
повторение описываемого данного.
Каждое повторение описываемого данного определяет э л ем енi
табл и ц ы. Элемент таблицы может иметь сложную структуру и
включать в себя данные, которые в свою очередь описаны с фразой
ПОВТОРЯЕТСЯ. Допускается три уровня вложенности фразь
ПОВТОРЯЕТСЯ, что позволяет описывать одно-, двух- и трехмерные
структуры данных.
Если данное, описанное с фразой ПОВТОРЯЕТСЯ, имеет под-
чиненное данное, описанное с фразой ПОВТОРЯЕТСЯ, то каждый
элемент описываемого уровня таблицы включает в себя количестве
повторений подчиненного данного, указанное в его описании. Таким
образом, каждый элемент более высокого уровня таблицы включае!
в себя указанное количество элементов более низкого уровня таблицы.
Рассмотрим, например, следующее описание:
01 сеть-автобусных-сообщений.
02 автокомбинат ПОВТОРЯЕТСЯ 5 РАЗ.
03 номер-автокомбнната Ш 99.
03 маршрут ПОВТОРЯЕТСЯ 40 РАЗ.
04 начало-маршрута Ш Х(26). '
04 конец-маршрута Ш Х(26).
04 период ПОВТОРЯЕТСЯ 4 РАЗА.
05 колнчество-автобусов Ш 99.
Из описания видно, что городское автобусное сообщение осуществ-
ляется пятью автокомбинатами, каждый из которых обслуживает 40
маршрутов, обеспечивая на каждом из маршрутов четыре варианта
движения автобусов в соответствии с временем суток (периодом).
Данное, описанное с фразой ПОВТОРЯЕТСЯ, и все подчиненные
ему данные должны индексироваться при каждом обращении к ним
в любых операторах раздела процедур, кроме оператора ИСКАТЬ.
Фраза ПОВТОРЯЕТСЯ не должна использоваться на уровне
статьи описания записи (на уровне 01) и в статье описания несвязан-
ного данного (на уровне 77).
I58
В соответствии в требованиями унифицированного Кобола фраза
ПОВТОРЯЕТСЯ не должна использоваться в статье, описывающей
данное переменного размера. Размер данного считается Переменным,
если описание любого подчиненного ему данного содержит фразу
ПОВТОРЯЕТСЯ с вариантом В ЗАВИСИМОСТИ ОТ. Однако тран-
сляторы Кобола ЕС ЭВМ допускают такое использование фразы ПОВ-
ТОРЯЕТСЯ и, более того, воспринимают три уровня вложенности
фразы ПОВТОРЯЕТСЯ с вариантом В ЗАВИСИМОСТИ ОТ.
Правила использования фразы ПОВТОРЯЕТСЯ в одной статье
описания данного с фразами ЗНАЧЕНИЕ и ВЫДЕЛЕНО рассмат-
риваются в п. 4.3.8 и п. 4.3.6.
Вариант В ЗАВИСИМОСТИ ОТ указывает, что описываемое дан-
ное повторяется переменное число раз и это число определяется те-
кущим значением имени-данного-1. Целое-1 может использоваться
только в сочетании с вариантом В ЗАВИСИМОСТИ ОТ и представляет
минимальное число повторений. Целое-1 может быть нулем или поло-
жительным целым числом.
Целое-2 представляет максимальное или, если вариант В ЗАВИ-
СИМОСТИ ОТ не указан, точное число повторений. Целое-2 должно
быть больше нуля и больше целого-1, но меньше, чем 32 768. Значение
имени-данного-1 не должно превышать целое-2.
Имя-данного-1 должно удовлетворять следующим требованиям:
а) оно должно быть описано как положительное целое;
б) его значение не должно превышать целое-2;
в) оно может быть уточнено, если это необходимо:
г) оно не должно индексироваться, т. е. содержать в своем описании
фразу ПОВТОРЯЕТСЯ, или подчиняться статье описания данного,
содержащей фразу ПОВТОРЯЕТСЯ;
д) если имя-данного-1 содержится в той же записи, что и таблица,
которой оно управляет, оно должно размещаться перед переменной
частью записи.
Если при выполнении программы значение имени-данного-1 из-
меняется, это приводит к следующим результатам:
а) размер данного, в состав которого входит таблица, изменяется
и соответствует текущему значению имени-данного-1;
б) пересылка в данное переменного размера производится на основе
текущего значения имени-данного-1;
в) значения данных, номер повторения которых превышает теку-
щее значение имени-данного-1, становятся неопределенными;
г) размещение данных, следующих в записи за данным переменного
размера, но не подчиненных ему, будет зависеть от нового значения
имени-данного-1. Значения этих данных могут быть утеряны, если
значение имени-данного-1 увеличивается. Если требуется сохранить
значения этих данных, перед изменением значения имени-данного-1
необходимо поместить все данные, следующие за данным переменного
размера, в рабочую область, а после изменения значения имени-дан-
ного-1 переслать их обратно. Автоматически такие действия не произ-
водятся.
159
Размер данного переменного размера подсчитывается транслятором
при изменении значения имени-данного-1 в следующих случаях:
а) когда файл читается и имя-данного-1 находится в читаемой за-
писи;
б) когда в имя-данного-1 или в группу, которой оно принадлежит,
производится засылка данных оператором ПОМЕСТИТЬ. Размер не
подсчитывается, если засылка производится в данное, которое переоп-
ределяет или переименовывает имя-данного-1.
Неиспользуемые позиции литер, появляющиеся в результате
уменьшения значения имени-данного-1 в варианте В ЗАВИСИМОСТИ
ОТ, на носитель данных не переносятся.
Данное, статья описания которого содержит фразу ПОВТОРЯЕТ-
СЯ с вариантом В ЗАВИСИМОСТИ ОТ или включает статью, содер-
жащую такую фразу, не может быть объектом фразы ПЕРЕОПРЕДЕ-
ЛЯЕТ.
Вариант ПО ВОЗРАСТАНИЮ или УБЫВАНИЮ КЛЮЧА ука-
зывает, что повторяющиеся данные расположены в таблице в порядке
возрастания или убывания"значений ключей: имени-данного-2, имени-
данного-3 и т. д. Упорядочение по ключам должно обеспечиваться
в соответствии с основной последовательностью кодов, определенной
фразой ПРОГРАММНЫЙ АЛФАВИТ в разделе оборудования. При
этом должны соблюдаться следующие требования:
а) ключи перечисляться в порядке убывания их старшинства;
б) общее количество ключей для данного элемента таблицы не пре-
вышать 12;
в) сумма длин всех ключей, связанных с одним элементом таблицы,
не превышать 256 байт;
г) любой ключ в элементе таблицы располагаться на фиксирован-
ном месте от начала таблицы, т. е. если элемент таблицы имеет пере-
менную длину, ключи должны предшествовать переменной части;
д) фраза об использовании для ключа может быть: ДЛЯ ВЫДАЧИ,
ДЛЯ ВЫЧИСЛЕНИЙ или ДЛЯ ВЫЧИСЛЕНИЙ-3.
Имя-данного-2 должно быть описано с фразой ПОВТОРЯЕТСЯ
или должно подчиняться данному, описанному с фразой ПОВТОРЯЕТ-
СЯ.
Имя данного, содержащего в статье описания фразу ПОВТОРЯЕТ-
СЯ, в которой в качестве ключей указано имя-данногЪ-2, имя-дан-
ного-3 и т. д., назовем субъектом фразы ПОВТОРЯЕТСЯ.
Если имя-данного-2 одновременно является субъектом фразы ПОВТО-
РЯЕТСЯ, оно является единственным ключом, который может быть
указан для этой таблицы.
Если имя-данного-2 не является субъектом фразы ПОВТОРЯЕТ-
СЯ, то все ключи, идентифицируемые именем-данного-2, именем-дан-
ного-3 и т. д., должны быть подчинены субъекту этой фразы ПОВТО-
РЯЕТСЯ, не. должны непосредственно подчиняться субъекту какой-
либо другой фразы ПОВТОРЯЕТСЯ и сами не должны содержать в
описании фразу ПОВТОРЯЕТСЯ.
Пример определения ключей;
160
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
77 тек-неделя ШАБЛОН 99.
01 таблица.
02 табл-раб ПОВТОРЯЕТСЯ 100 РАЗ
ПО ВОЗРАСТАНИЮ КЛЮЧА норма-зар, ном-раб
ИНДЕКСИРУЕТСЯ al, в1.
03 вмя-раб Ш Х(20).
03 ном-раб Ш 9(6).
03 норма-зар III 9999Т99.
03 зап-недели ПОВТОРЯЕТСЯ ОТ 1 ДО 52 РАЗ
В ЗАВИСИМОСТИ ОТ тек-неделя
ПО ВОЗРАСТАНИЮ КЛЮЧА ном-неделн
ИНДЕКСИРУЕТСЯ cl.
04 ном-недели Ш 99.
04 отсут-у Ш 9.
04 отсут-ну Ш 9.
04 опозд Ш 9.
Вариант ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА должен
использоваться в сочетании с вариантом ИНДЕКСИРУЕТСЯ и необ-
ходим, если поиск в таблице будет выполняться оператором ИСКАТЬ
ОСОБО.
Вариант ИНДЕКСИРУЕТСЯ указывает имя индекса, которое
может использоваться в разделе процедур для обращения к «дан ному,
описанному с фразой ПОВТОРЯЕТСЯ, или данному, подчиненному
ему. Имя индекса определяется своим появлением во фразе ПОВТО- .
РЯЕТСЯ и не описывается ни в каком другом месте программы. В од-
ной статье описания данного может быть определено не более 12 имен
индексов. Значение имени индекса задается с помощью оператора
УСТАНОВИТЬ, или ВЫПОЛНИТЬ с фразой ВМЕНЯЯ- Это значение
представляет собой двоичное смещение данного от начала таблицы
(о представлении значений имен индексов см. п. 7.2.1).’
7.1.2. Фраза ДЛЯ ИНДЕКСА .
Фраза ДЛЯ ИНДЕКСА служит для определения индексного дан-
ного.
Формат:
ДЛЯ ИНДЕКСА
Индексное данное—это элементарное данное (необязательно свя-
ванное с какой-либо таблицей), которое используется для хранения
вначений имен индексов. Значение имени индекса присваивается ин-
дексному данному с помощью оператора УСТАНОВИТЬ.
Фраза ДЛЯ ИНДЕКСА может использоваться в описании как эле-
ментарного, так и группового данного. Если с фразой ДЛЯ ИНДЕКСА
описано групповое данное, то индексными данными считаются все
элементарные данные внутри группы. Само групповое данное не яв-
ляется индексным данным и не может использоваться в операторах
УСТАНОВИТЬ и ИСКАТЬ или в условиях отношения. Фраза ДЛЯ
ИНДЕКСА в описании элементарного данного не должна противоре-
чить фразе об использовании группы, которой принадлежит это эле-
ментарное данное.
6 Зак. 73 161
Индексное данное может использоваться только в операторах
УСТАНОВИТЬ, ИСКАТЬ и в условии отношения. Такое данное мо-
жет быть частью группы, к которой обращаются в операторе ПОМЕ-
СТИТЬ или в операторе ввода-вывода, однако- при выполнении этих
операторов преобразования значения индексного данного не происхо-
дит-
Индексное данное нельзя использовать в качестве индекса. Индекс-
ное данное не может быть условной переменной.
Одновременно с фразой ДЛЯ ИНДЕКСА в описании данного не
должны употребляться фразы ВЫДЕЛЕНО, СДВИНУТО, ШАБЛОН,
ПРОБЕЛ КОГДА НУЛЬ или ЗНАЧЕНИЕ. Однако транслятор поз-
воляет использовать фразу ВЫДЕЛЕНО вместе с фразой ДЛЯ ИН-
ДЕКСА в целях получения более эффективной объектной программы.
7.2. СРЕДСТВА ОБРАБОТКИ ТАБЛИЦ
В РАЗДЕЛЕ ПРОЦЕДУР
7.2.1. Индексирование
Данное, описанное в фразой ПОВТОРЯЕТСЯ, или подчиненное
ему данное должно индексироваться при каждом обращении к нему
в разделе процедур. Исключение представляет оператор ИСКАТЬ,
в котором имя данного, описанного с фразой ПОВТОРЯЕТСЯ, не
должно индексироваться.
Формат индексируемого имени данного:
имя-данного (индекс [, индекс] L индекс])
Индекс или набор индексов заключается в круглые скобки и сле-
дует за именем данного. Количество индексов определяется вложен-
ностью фраз ПОВТОРЯЕТСЯ. Индексироваться должно каждое изме-
рение таблицы. Индексы отделяются друг от друга запятой. За каждой
запятой следует пробел. Между левой скобкой и крайним левым индек-
сом и между крайним правым индексом и правой скобкой не должно
быть пробелов.
Когда данное, описанное с фразой ПОВТОРЯЕТСЯ, индексирует-
ся, оно определяет одно конкретное повторение, т. е.
элемент таблицы. Неиндексированное Данное, описанное с фразой
ПОВТОРЯЕТСЯ (что допустимо только в операторе ИСКАТЬ), пред-
ставляет все повторения одного уровня таблицы. Общая дли-
на элементов одного уровня таблицы должна быть меньше 32 767 байт.
Индекс может быть представлен числовым литералом, специальным
регистром СЧЕТЧИК, именем данного и именем индекеа.
Числовой литерал, используемый в качестве индекса, должен быть
целым положительным.
Имя данного, используемого в качестве индекса, должно удовлет-
ворять следующим требованиям:
а) оно должно относиться к числовому элементарному данному,
которое представляет целое положительное число;
162
б) имя данного не может быть индексировано, но может быть уточ-
нено.
Если индекс представлен числовым литералом, именем данного
или специальным регистром СЧЕТЧИК, он указывает номер повторе-
ния элемента таблицы. Наименьшее допустимое значение индекса рав-
но 1, а наибольшее—максимальному числу повторений, указанному
во фразе ПОВТОРЯЕТСЯ. ‘
Имя индекса — это имя, связанное с конкретным измерением таб-
лицы и задаваемое в варианте ИНДЕКСИРУЕТСЯ фразы ПОВТО-
РЯЕТСЯ в описании таблицы. Каждому имени индекса в основной
памяти соответствует полное слово. Оно содержит двоичное значение i,
представляющее фактическое смещение элемента от начала таблицы,
соответствующее его номеру повторения. Это значение вычисляется
по формуле *
i = (п — 1) » т,
где п — номер повторения;
m — размер данного, в статье описания которого определено имя
индекса.
Например, пусть таблица описана следующим образом;
03 а; ПОВТОРЯЕТСЯ 15 РАЗ ИНДЕКСИРУЕТСЯ г.
04 al ШАБЛОН Х(4).
04 а2 ШАБЛОН Х(6).
Двоичное значение, содержащееся в z для пятого повторения
«а», будет соответствовать произведению (5— 1) * 10, т. е. 40.
При использовании имени индекса в качестве индекса индексиру-
емое имя данного может иметь также следующий формат:
имя-данного (имя-индекса [{±} целое] ], имя-нндекса
1{±} целое]] 1, имя-индекса [ {±} целое]])
Если при индексировании индекс представлен в виде суммы (или
разности) имени индекса и целого, такое индексирование называется
относительным, например;
данное (инд 4-5)
При записи'такого выражения знаки «4-» и <—» должны быть вы-
делены пробелами с двух сторон. Целое должно быть без знака.
При относительном индексировании целое рассматривается как
номер повторения и перед сложением (вычитанием) преобразуется в
форму представления значений имен индексов. Пусть, например, zl
индексирует элемент таблицы длиной 100 байт, jl — элемент длиной
10 байт, к1 — элемент таблицы длиной 2 байта. Тогда адрес (а) дан-
ного bl (zl 4- 1, jl 4- 3, kl 4-4) будет вычисляться по формуле
а = А 4- Z1 4- 100 * 1 4- И 4- 10 * 3 -f-’kl 4- 2 * 4,
где А — адрес начала таблицы.
6*
163
Значение имени индекса может быть установлено и (или) модифи»
цировано только операторами УСТАНОВИТЬ, ВЫПОЛНИТЬ и
ИСКАТЬ.
Индексируемые имена данных могут требовать уточнения. В этом
случае вслед за именем данного сначала записываются все уточнители,
а затем индексы.
Формат: •
имя-данного ИЗ имя-данного-1 [ИЗ имя-данного-2] ...
(индекс [, индекс] ], индекс])
Индексируемым здесь является имя-данного, а не имя-данного-1
или имя-данного-2. Например, в выражении «зарплата ИЗ список-
раб (год, месяц)» данное «зарплата» индексируется индексами '«год»
н «месяц». . 8 БАЙТ
0
- СЧЕТ (1, 1, 1)
КОМАНДА (1, 1) :: 8
СЧЕТ (1, 1, 2) 16
СЧЕТ (1, 2, 1)
ТУР (1) КОМАНДА (1, 2) 24
СЧЕТ (1, 2, 2)
32
СЧЕТ (1, 3, 1)
КОМАНДА (1, 3) : 40
СЧЕТ (1, 3, 2)
48
СЧЕТ (2, 1, 1)
КОМАНДА (2, 1) 56
СЧЕТ (2, 1, 2)
G4
СЧЕТ <2,-2, 1)
Таблица тур (2) команда (2, 2) 72
СЧЕТ (2, 2, 2)
• 80.
СЧЕТ (2, 3, 1)
КОМАНДА (2, 3) — дд
СЧЕТ (2, 3, 2)
96
СЧЕТ (3, Г, 1)
КОМАНДА (3, 1) 104 СЧЕТ (3, 1, 2)
112
СЧЕТ (3, 2, 1)
ТУР (3) КОМАНДА (3, 2) “7 190 СЧЕТ (3, 2, 2)
128
КОМАНДА (3, 3) СЧЕТ (3, 3, 1)
_ 13D
( / X. СЧЕТ (3, -3, 2)
Рнс. 20. Расположение элементов таблицы в основной памяти.
164
При индексировании необходимо иметь в виду следующее:
а) имя данного не должно требовать индексирования, если оно само
используется в качестве индекса или уточнителя;
б) когда для данного требуется и уточнение, и индексирование,
индексы указываются после уточнения;
в) числовой литерал, имя данного и специальный регистр СЧЕТЧИК
не должны использоваться в одной ссылке с именем индекса;
г) индексное данное не может использоваться в качестве индекса.
Пример
01 таблица.
02 тур ПОВТОРЯЕТСЯ 3 РАЗА ИНДЕКСИРУЕТСЯ I.
03 команда ПОВТОРЯЕТСЯ 3 РАЗА ИНДЕКСИРУЕТСЯ j.
04 счет ПОВТОРЯЕТСЯ 2 РАЗА
ИНДЕКСИРУЕТСЯ п ШАБЛОН 9(4)Т9(4).
Этот пример иллюстрирует описание трехмерной таблицы. При
обращении к элементарному данному таблицы его имя («счет») следует
индексировать тремя индексами, т. е. ссылка на это данное, в разделе
процедур должна иметь вид: счет (i, j, п). Расположение элементов
таблицы в основной памяти показано на рис. 20.
7.2.2. Сравнения, включающие имена индексов
и индексные данные
Сравнения, включающие имена индексов и (или) индексные данные,
выполняются по правилам, описанным в табл. 22. Литералы и имена
данных, не являющиеся индексными данными, которые участвуют в
сравнениях с именами индексов, должны представлять целые поло-
жительные числа.
Таблица 22
Первый операнд Второй операнд
Имя индекса Индексное данное Имя данного Числовой литерал
Имя индекса Сравниваются номера повто- рений Сравниваются без преобразо- вания Сравнивается номер повто- рения со зна- чением имени данного Сравнивается иомер повто- рения с лите- ралом
Индексное данное Сравниваются без преобразо- вания Сравниваются без преобразо- вания Недопустимо Недопустимо ,
Имя данного Сравйивается номер повто- рения со зна- чением имени данного Недопустимо См. табл. 12 См. табл. 12
Числовой лите-, рал • Сравнивается иомер повторе- ния с литералом Недопустимо ' См. табл. 12 Недопустимо
185
7.2.3. Оператор ИСКАТЬ
Оператор ИСКАТЬ служит для поиска в таблице элемента, удовлет-
воряющего заданному условию, и для установки значения связанного
с этим элементом имени индекса на соответствующий номер повторения.
Формат 1:
ИСКАТЬ В идентификатор-1 [ МЕНЯЯ { }]
[В КОНЦЕ повелительный-оператор-1]
г- гг» 1 /повелительиый-оператор-2 1
КОГДА условие-1 |с ЛЕ ДУЮЩЕЕ ПРЕДЛОЖЕНИЕ/
| КОГДА условие-2 { СЛЕДУЮЩЕЕ °ПРЕдКоЖЕНИЕ }] * ’
Формат 2:
ИСКАТЬ ОСОБО В идентификатор-1
1В КОНЦЕ повелительный-оператор-1)
vv-irrrn t /повелительиый-оператор-2 >
КОГДА условие-1 ^СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ J
Идентификатор-1 определяет таблицу целиком. Он не должен
индексироваться. Его описание должно содержать фразу ПОВТОРЯЕТ-
СЯ с вариантом ИНДЕКСИРУЕТСЯ. Идентификатор-1 не должен'от-
носиться к данным с плавающей точкой. Он может быть подчинен дан-
ному, описанному с фразой ПОВТОРЯЕТСЯ, которое в свою очередь
может подчиняться данному, описанному с фразой ПОВТОРЯЕТСЯ.
С каждым уровнем таблицы посредством, варианта ИНДЕКСИРУЕТ-
СЯ фразы ПОВТОРЯЕТСЯ должно быть связано имя индекса.
При выполнении оператора ИСКАТЬ автоматически изменяется
только имя-индекса (первое или единственное), связанное е идентифи-
катором-) в варианте ИНДЕКСИРУЕТСЯ фразы ПОВТОРЯЕТСЯ
в описании идентификатора-). Поэтому, если просматривается двух-
или трехмерная таблица, имена-индексов, связанные с другими изме-
рениями таблицы, должны устанавливаться и изменяться програм-
мистом.
При выполнении оператора ИСКАТЬ формата 1 (без фразыМЕНЯЯ)
осуществляется последовательный поиск, начиная с текущего значения
имени индекса, связанного с идентификатором-). Если к началу вы-
полнения оператора ИСКАТЬ значение имени индекса, связанного
с идентификатором-), не превышает наибольший допустимый номер
повторения, то производятся следующие действия:
а) условия во фразе КОГДА проверяются в порядке их написания;
б) если ни одно из условий не выполняется, значение имени индекса
для идентификатора-) увеличивается так, чтобы обеспечить обра-
щение'к следующему элементу таблицы, и снова проверяются условия;
в) если при проверке одно из условий во фразах КОГДА удовлет-
воряется, поиск сразу же прекращается и выполняется повелительный
оператор, связанный с этим условием, или следующее предложение
(если указана фраза СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ). Имя индекса
указывает на элемент таблицы, для которого выполнилось условие|
166
г) если просмотрена вся таблица, а ни одно из условий не выпол-
нилось, поиск заканчивается и, если указана фраза В КОНЦЕ, вы-
полняется повелительный-оператор-1. Если фраза В КОНЦЕ не ука-
зана, управление передается следующему предложению.
Если к началу выполнения оператора ИСКАТЬ значение имени-
индекса, связанного с идентификатором-1, оказалось больше макси-
мально допустимого номера повторения, сразу выполняется повели-
тельный-оператор-1, если указана фраза В КОНЦЕ, или следующее
предложение.,
Йдентификатор-2 во фразе МЕНЯЯ должен быть индексным дан-
ным или числовым элементарным данным с фиксированной точкой,
описанным как целое. Когда изменяется имя-индекса для идентифи-
катора-1, используемое для поиска, идентификатор-2 изменяется так,
чтобы его значение соответствовало текущему номеру повторения.
Имя-индекса-1 bq фразе МЕНЯЯ может быть одним из индексов,
связанных G идентификатором-1, или относиться к другой таблице.
Если ймя-индекса-1 является одним из индексов идентифика-
тора-!, оно используется для поиска. В противном случае используется
первое (единственное) имя индекса из определенных для идентифи-
катора-1. В последнем случае каждый раз, когда увеличивается значе-
ние имени индекса для идентификатора-1, одновременно увеличивается
и имя-индекса-1.
Фраза МЕНЯЯ дает возможность программисту исследовать
сразу несколько элементов одной таблицы (например, сравнить
их), если одна и та. же таблица просматривается несколькими опера-
торами ИСКАТЬ, каждый из которых использует различные имена-
индексов, связанные с идентификатором-1, или элементы двух таблиц,
если в операторе ИСКАТЬ указано имя-индекса, связанное с другой
таблицей.
Начальное значение имени-индекса, используемого для поиска,
должно устанавливаться программистом перед каждым выполнением
оператора ИСКАТЬ формата 1.
Условие-1, условие-2 и т. д. могут быть простыми условиями лю-
бого типа: условием отношения, условием класса, условием имени
условия, условием состояния переключателя (только для ДОС), ус-
ловием знака. Условия могут быть также сложными. Если р операторе
ИСКАТЬ указано несколько фраз КОГДА, связанные с ними условия
проверяются последовательно и, если какое-нибудь из условий удов-
летворяется, выполняется соответствующий повелительный оператор.
ЕслЙ требуется одновременное выполнение всех условий, должно
использоваться сложное условие о И в качестве знака логической
операции.
Схема выполнения оператора ИСКАТЬ в двумя фразами КОГДА
приведена на рис. 21.
Пусть в разделе данных имеется следующая таблица допустимых
шифров:
01 значения-шифров.
02 ЗАП Ш Х(3) ЗНАЧ 'ЗЗА'.
02 ЗАП Ш Х(3) ЗНАЧ '34А'.
167
Рис. 2L Схема выполнения оператора ИСКАТЬ' с двумя
фразами КОГДА:
У-1, У-2 —• условия; ПО-1, ПО-2, ПО-3 — повелительные операто*
ры; ИИ, ИИ-1 — имена индексов; И-1, И-2 идентификаторы
168
02 ЗАП Ш Х(3) ЗНАЧ '82А'.
02 ЗАП Ш-Х(3) ЗНАЧ '83А'.
02 ЗАП Ш Х(3) ЗНАЧ ’84А'.
02 ЗАП Ш Х(3) ЗНАЧ '85А'.
02 ЗАП Ш Х(3) ЗНАЧ '87А'.
02 ЗАП Ш Х(3) ЗНАЧ '88А'.
02 ЗАП Ш Х(3) ЗНАЧ '90А'.
02 ЗАП Ш Х(3) ЗНАЧ '91А'.
02 ЗАП Ш Х(3) ЗНАЧ '92А'.
• 01 таблица-кодов ПЕРЕОПРЕДЕЛЯЕТ значения-шифров,
02 код Ш Х(3) ПОВТОРЯЕТСЯ И раз
ПО ВОЗРАСТАНИЮ КЛЮЧА код ИНДЕКСИРУЕТСЯ I.
01 счетчики.
02 всего Ш 9(4) ПОВТОРЯЕТСЯ 11 РАЗ ИНДЕКСИРУЕТСЯ j.
Тогда для проверки данного «шифр-вх» во входном документе на
допустимое значение и подсчета числа документов с каждым из за-
данных шифров можно применить следующие операторы:
УСТАНОВИТЬ i НА 1.
ИСКАТЬ В код МЕНЯЯ 1
В КОНЦЕ ВЫДАТЬ 'НЕПРАВИЛЬНЫЙ ШИФР', шифр-вх
КОГДА шифр-вх = код (1)
СЛОЖИТЬ 1 G всего (j).
Оператор ИСКАТЬ ОСОБО (формат 2) реализует бинарный метод
поиска и более эффективен, если таблица велика. В этом случае таб-
лица должна быть упорядочена по ключам. Описание идентификатора-1
должно содержать фразу ПОВТОРЯЕТСЯ с вариантом ПО ВОЗРА-
СТАНИЮ (УБЫВАНИЮ) КЛЮЧА. • •
Условие-1 может быть одним из следующих:
а) условием отношения со знаками отношения РАВНО или «=».
Один из операндов этого отношения должен представлять одно из
имен данных, которые появляются в варианте ПО ВОЗРАСТАНИЮ
(УБЫВАНИЮ) КЛЮЧА фразы ПОВТОРЯЕТСЯ для идентифика-
тора- 1;
б) условием имени условия, для которого фраза ЗНАЧЕНИЕ
состоит только, из одного литерала. Условная переменная, связан-
ная с именем условия, должна быть одним из имен данных, которые
появляются в варианте ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА
фразы ПОВТОРЯЕТСЯ для идентификатора-1;
в) сложным условием, образованным из простых условий описан-
ного выше типа с И в качестве знака логической операции.
Любое jimh данного, появляющееся в варианте ПО ВОЗРАСТА-
НИЮ (УБЫВАНИЮ) КЛЮЧА для идентификатора-1, может быть
проверено в условии-1. Однако если какое-нибудь из этих имен дан-
ных проверяется в условии-1, то в нем должны быть также проверены
все имена данных, предшествующие ему во фразе ПО ВОЗРАСТАНИЮ
(УБЫВАНИЮ) КЛЮЧА. Например, пусть в разделе данных опре-
делена следующая таблица:
77 знач-1 ШАБЛОН 99.
02 а ПОВТОРЯЕТСЯ 10 РАЗ
169
ПО ВОЗРАСТАНИЮ КЛЮЧА кл1, кл2, клЗ, кл4
ИНДЕКСИРУЕТСЯ i.
03 кл1 ШАБЛОН 9.,
03 кл2 ШАБЛОН 99. -
03 клЗ ШАБЛОН 9.
03 кл4 ШАБЛОН 9.
88 бл ЗНАЧЕНИЕ I.
• •в
В разделе процедур следующие фразы КОГДА были бы правиль-
ными:
КОГДА КЛ1 (i) = 3 И кл2 (1) = 10 И клЗ (1) = 5 ...
КОГДА, кл1 (1) = 3 И кл2 (i) = знач-1
И клЗ (1) = 5 И бл (1) ...
. При выполнении оператора ИСКАТЬ ОСОБО для поиска в таблице
будет использоваться первое (или единственное) имя-йндекса, связан-
ное с идентификатором-1. Значение индекса изменяется во время по-
иска так, что оно никогда не бывает меньше значения, соответствую-
щего первому элементу таблицы, и никогда не бывает больше значения,
соответствующего последнему элементу таблицы. Если условие-1
не может выполниться ни для какого элемента таблицы, управление
передается повелительному-оператору-1, если была указана фраза
В КОНЦЕ, в противном случае—следующему предложению. В любом
из этих случаев конечное значение индекса не определено. Если усло-
вие-1, удовлетворяется для некоторого элемента таблицы, индекс ука-
зывает на соответствующее повторение и управление передается по-
велительному-оператору-2.
Все нечисловые сравнения, явно указанные в операторе ИСКАТЬ
формата 1 и 2 или неявно предполагаемые в операторе ИСКАТЬ
ОСОБО, выполняются в соответствии с основной последовательностью
кодов, определенной фразой ПРОГРАММНЫЙ АЛФАВИТ в разделе
оборудования.
Оператор ИСКАТЬ обеспечивает просмотр таблицы только по
одному измерению, так как может изменять только один индекс,
связанный с этим измерением таблицы. Ниже, приводится пример,
показывающий, как осуществить полный просмотр таблицы.
Пусть таблица описана следующим образом:
01 население.
02 рес ПОВТОРЯЕТСЯ 15 РАЗ ИНДЕКСИРУЕТСЯ Л.
03 обл ПОВТОРЯЕТСЯ 50 РАЗ ИНДЕКСИРУЕТСЯ 12.
04 район ПОВТОРЯЕТСЯ 10 РАЗ ИНДЕКСИРУЕТСЯ 13.
65 шифр ШАБЛОН 9(6).
05 число ШАБЛОН 9(8).
Требуется найти число жителей района, шифр которого совпадает
со значением данного «шифр-вх». Это можно выполнить таю
чтение.
ВЫПОЛНИТЬ поиск ПО выход
МЕНЯЯ il ОТ 1 НА 1 ДО 11 > 15
ЗАТЕМ 12 ОТ 1 НА 1 Д® 12 >50.
170, *
поиск.
УСТАНОВИТЬ i3 НА 1.
ИСКАТЬ район
КОГДА шифр (il, i2, 13) = шифр-вх
ВЫДАТЬ 'ЧИСЛО ЖИТЕЛЕЙ РАЙОНА' шифр-вх
число (il, i2, i3) ПЕРЕЙТИ К чтение.
выход. ВЫЙТИ.
7.2.4. Оператор УСТАНОВИТЬ
Оператор УСТАНОВИТЬ предназначен для установки значений
имен индексов, связанных с элементами таблиц. Этот оператор ис-
пользуется для задания начального значения имени индекса перед вы-
полнением оператора ИСКАТЬ; он может также применяться для
передачи значений между именами индексов и другими элементарными
данными.
Формат 1s
{ имя-индекса-1
идеи гификатор-1
НА
[имя-индекса-2] . . . '
[идентификатор-2]. . .
имя-индекса-3
идентификатор-3
литерал-1
Формат 2:
УСТАНОВИТЬ имя-индекса-4 [имя-индекса-5] Г. ;
ПРИБАВЛЯЯ) /идентификатор-4'
ВЫЧИТАЯ J (литерал-2
Все идентификаторы, кроме идентификатора-4, должны относиться
к индексным данным или Числовым элементарным данным с фиксиро-
ванной точкой, описанным как целые. Идентификатор-4 не может быть
индексным данным. Литералы должны быть положительными целыми.
Имена индексов связываются с данной таблицей через вариант ИНДЕК-
СИРУЕТСЯ фразы ПОВТОРЯЕТСЯ.
В формате 1 выполнение оператора УСТАНОВИТЬ происходит
по правилам, указанным в табл. 23.
В формате 2 при выполнении оператора УСТАНОВИТЬ содержи-
мое имени-индекса-4 (имени-индекса-5 и т. д.) увеличивается (ПРИБАВ-
ЛЯЯ) или уменьшается (ВЫЧИТАЯ) на значение, соответствующее
числу повторений, представленному значением литерала-2 или иден-
тификатора-4.
Преобразования значений данных при .выполнении оператора
УСТАНОВИТЬ обусловлены особой формой представления значении
имен индексов в основной памяти (см. п. 7.2.1). Эта форма представ-
ления ие позволяет воспользоваться обычным оператором ПОМЕС-
ТИТЬ для передачи значений между именами индексов, а также меж-
171 1
Таблица 23
Первый операнд (перед словом НА) Второй операнд (после слова НА)
Имя индекса Индексное данное Идентификатор чис- лового данного иля литерал
Имя индекса *• У станавливается на значение, соот- ветствующее номе- ру повторения, за- данному вторым операндом Пересылается без преобразования Устанавливается на‘значение, соот- ветствующее номе- ру повторения, за- данному вторым операндом
Индексное данное Пересылается' без преобразования Пересылается без преобразования Недопустимо
Идентификатор числового данного У ста н авливается на номер повторения, соответствующий значению второго операнда Недопустимо Недопустимо
ду именами индексов и другими элементарными данными. Поясним
это на примере. Пусть-в разделе данных определены следующие таб-
лицы: -
02 таблица-1.
03 строка-1 ПОВТОРЯЕТСЯ 4 РАЗА ИНДЕКСИРУЕТСЯ и1.
04 аГ ШАБЛОН Х(3).
04 61 ШАБЛОН Х(5).
02 таблица-2. -
03 строка-2 ПОВТОРЯЕТСЯ 3 РАЗА ИНДЕКСИРУЕТСЯ и2.
04 а2 ШАБЛОН Х(2).
04 62 ШАБЛОН 9(4). '
. 04 в2 ШАБЛОН 9(5).
И пусть значение индекса «иЬ равно 16 (это соответствует третьему
повторению данного строка-1). Для того чтобы установить значение
индекса «и2» на номер повторения, «оответствующий значению «иЬ,
необходимо выполнить следующие преобразования:
а) вычислить номер повторения, соответствующий значению «и1»
16/8 + 1 = 3,
где 8 — размер элемента таблицы-1;
б) вычислить значение «и2», соответствующее номеру повторения
«И1»
11,(3—1)= 22,
где 11 — размер элемента таблицы-2.
Так как индексное данное устанавливается на значение другого ин-
дексного данного или имени индекса (и наоборот) без преобразований,
следует следить за тем, чтобы установка имени индекса соответство-
вала требуемому номеру повторения элемента. Пусть требуется обра-
титься к значению данного д1 (2,2,3), являющегося элементом следую-
щей таблицы: 1 .
172
01 al.
02 в1 ПОВТОРЯЕТСЯ 2 РАЗА ИНДЕКСИРУЕТСЯ и1.
03 cl ПОВТОРЯЕТСЯ 2 РАЗА ИНДЕКСИРУЕТСЯ и2.
04 д! ПОВТОРЯЕТСЯ 3 РАЗА ИНДЕКСИРУЕТСЯ иЗ.
ШАБЛОН Х(25).
Правильное значение смещения для данного д! (2, 2, 3) равно 275:
(2 — 1} * 150 + (2 — 1) * 75 + (3 — 1) * 25.
Следующая последовательность операторов даст неправильное
вначение смещения для данного д1 (и1, и2, иЗ):
УСТАНОВИТЬ из НА I
УСТАНОВИТЬ ин-данное НА иЗ
УСТАНОВИТЬ иЗ ПРИБАВЛЯЯ I
УСТАНОВИТЬ и1, и2 НА ин-данное
Здесь «ин-данное» предвтавляет индекеное данное. Значение «иЗ»
после выполнения первого оператора. УСТАНОВИТЬ равно 25. После
выполнения второго оператора УСТАНОВИТЬ число 25 помещается
в «ин-данное», которое помещается затем в «и1» и «и2» четвертым опе-
ратором УСТАНОВИТЬ, в результате чего «и1» и «и2» не указывают
бЬльше на какой-либо элемент того уровня таблицы, с которым они
связаны.
Следующая последовательность операторов даст правильное вна-
чение смещения:
УСТАНОВИТЬ иЗ НА 2
УСТАНОВИТЬ и1, и2 НА иЗ
УСТАНОВИТЬ иЗ ПРИБАВЛЯЯ 1.
Для элемента таблицы переменной длины вычисленное значение
имени индекса становится неправильным, когда изменяется длина эле-
мента таблицы, т. е. изменяется значение имени данного, которое
определяет число повторений. С помощью оператора УСТАНОВИТЬ
программист может скорректировать значение имени индекса.
Пример.
77 д1 ШАБЛОН 39(5) ДЛЯ ВЫЧ ВЫДЕЛЕНО.
77 el ШАБЛОН 39(5) ДЛЯ ВЫЧ ВЫДЕЛЕНО.
01 .... •
02 al ПОВТОРЯЕТСЯ 10 ИНДЕКСИРУЕТСЯ инд!.
03 в1 ПОВТОРЯЕТСЯ 10 В ЗАВИСИМОСТИ ОТ el
ИНДЕКСИРУЕТСЯ инд2 ....
РАЗДЕЛ ПРОЦЕДУР.
ПОМЕСТИТЬ 8 В el.
УСТАНОВИТЬ инд! НА 3.
ИСКАТЬ al ....
ПОМЕСТИТЬ 10 В el.
ИСКАТЬ al ...
В этом примере пересылка 10 в tel» изменяет длину элемента таб-
лицы «а1», вследствие чего значение «инд!» становится неправильным.
Правильная установка индекса может быть выполнена, например,
так:
173
ПОМЕСТИТЬ 8 В el.
УСТАНОВИТЬ инд] НА 3.
УСТАНОВИТЬ д1 НА инд1.
ИСКАТЬ al ...
ПОМЕСТИТЬ 10 В el.
УСТАНОВИТЬ инд! НА-д!.
ИСКАТЬ al ...
В этом примере предварительно запомненный в «д!» номер повто-
рения используется для установки значения «индЬ после того, как
изменилось значение «е1», т. е. изменился размер элемента таблицы.
7.3. ПРИМЕР ПРОГРАММЫ ОБРАБОТКИ ТАБЛИЦ
Приводимый ниже пример программы иллюстрирует использова-
ние следующих средств обработки таблиц: индексирования, опера-
тора УСТАНОВИТЬ и оператора ИСКАТЬ (в форматах 1 и 2). Про-
грамма используется для сравнения ежегодной рождаемости я смерт-
ности в любой из 15 республик за последние 10 лет е общими цифрами
рождаемости и смертности в той же республике за весь Десятилетний
период.
Входной файл «вхкарты» содержит информацию, в соответствии а
которой производится поиск в таблице. Запись файла «вхкарты»
содержит еледующую информацию:
республика — сокращенное имя республики из четырех литер;
код - пола — код пола (1 — мужской, 2 — женский);
год — год (1966—1975).
Пример.
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, iabl.
РАЗДЕЛ ОБОРУДОВАНИЯ.
СЕКЦИЯ КОНФИГУРАЦИИ.
ИСХОДНАЯ-МАШИНА. ЕС-1022.
РАБОЧАЯ-МАШИНА. ЕС-1022.
СПЕЦИАЛЬНЫЕ-ИМЕНА. CONSOLE ЕСТЬ пиш-маш.
СЕКЦИЯ ВВОДА-ВЫВОДА.
УПРАВЛЕНИЕ-ФАЙЛАМИ. .
ДЛЯ вхфайл НАЗНАЧИТЬ SYS008-UT-5010-S.*
ДЛЯ выхфайл НАЗНАЧИТЬ SYS005-UR-7030-S. **
ДЛЯ вхкарты НАЗНАЧИТЬ SYS006-UR-6012-S.***
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ ФАЙЛОВ.
ОФ вхфайл МЕТКИ ОПУЩЕНЫ.
01 таблица Ш Х(4260).
01 таблица;2 Ш Х(540).
* Только для ДОС EG. Для OG EG имя реализации во фразе НАЗНАЧИТЬ
может быть, например, таким: UT-5010-S-INFILE
** Только для ДОС ЕС. Для ОС ЕС имя реализации во фразе НАЗНАЧИТЬ
может быть, .например, таким: UR-7030-S-PR1NT
*“ Только для ДОС ЕС. Для ОС ЕС имя реализации во фразе НАЗНАЧИТЬ
может быть, например, таким: UR-6012-S-CARD
174 .
ОФ выхфайл МЕТКИ ОПУЩЕНЫ.
01 строка Ш. Х( 8).
ОФ вхкарты МЕТКИ ОПУЩЕНЫ.
01 карта.
02 республика Ш Х(4).
02 код-пола Ш 9.
02 год Ш 9(4).
02 ЗАПОЛНИТЕЛЬ Ш Х(71).
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
01 область-печати-10.
02 ЗАПОЛНИТЕЛЬ Ш X ЗНАЧЕНИЕ ПРОБЕЛ.
02 респ-10 Ш Х(4).
02 ЗАПОЛНИТЕЛЬ Ш Х(3) ЗНАЧЕНИЕ ПРОБЕЛЫ.
02 рождаемость-10 Ш 9(7). . .
02 ЗАПОЛНИТЕЛЬ Ш Х(3) ЗНАЧЕНИЕ ПРОБЕЛЫ.
02 смертность-10 Ш 9(7).
. 02 ЗАПОЛНИТЕЛЬ Ш Х(103) ЗНАЧЕНИЕ ПРОБЕЛЫ.
01 область-печати.
- 02 ЗАПОЛНИТЕЛЬ Ш X ЗНАЧЕНИЕ ПРОБЕЛ.
02 год Ш 9(4).
02 ЗАПОЛНИТЕЛЬ Ш Х(3) ЗНАЧЕНИЕ ПРОБЕЛЫ.
02 рождаемость Ш 9(5).
02 ЗАПОЛНИТЕЛЬ Ш Х(3) ЗНАЧЕНИЕ ПРОБЕЛЫ.
02 смертность Ш 9(5).
02 ЗАПОЛНИТЕЛЬ Ш Х(107) ЗНАЧЕНИЕ ПРОБЕЛЫ.
01 статистика-переписи.
02 республика-ст; ПОВТОРЯЕТСЯ 15 РАЗ ИНДЕКСИРУЕТСЯ рп.
03 респ-ст Ш Х(4).
03 пол; ПОВТОРЯЕТСЯ 2 РАЗА ИНДЕКСИРУЕТСЯ пл.
04 статистика; ПОВТОРЯЕТСЯ 10 РАЗ
ПО ВОЗРАСТАНИЮ КЛЮЧА год
. ИНДЕКСИРУЕТСЯ гд.
05 год Ш 9( 7).
05 рождаемость Щ 9(5).
05 смертность Ш 9(>).
01 статистика-10-лет.
02 пол-10; ПОВТОРЯЕТСЯ 2 РАЗА ИНДЕКСИРУЕТСЯ пл-|0. . ,
03 республика-10; ПОВТОРЯЕТСЯ 15 РАЗ ИНДЕКСИРУЕТСЯ рп-10.
04 респ-10 Ш Х(4).
04 рождаемость-10 Ш 9(7).
• 04 смертность-10 Ш 9(7).
РАЗДЕЛ ПРОЦЕДУР.
открытие-фа йлов.
ОТКРЫТЬ ВХОДНОЙ вхфайл, вхкарты, ВЫХОДНОЙ выхфайл.
чтение-табл.
ЧИТАТЬ вхфайл В статистика-переписи;
В КОНЦЕ ПЕРЕЙТИ К чтение-карт.
ЧИТАТЬ вхфайл В статистика-10-лет;
В КОНЦЕ ПЕРЕЙТИ К чтение-карт.
чтение-карт.
ЧИТАТЬ вхкарты; В КОНЦЕ ПЕРЕЙТИ К конец-1.
определение-рп.
УСТАНОВИТЬ рп, рп-10 НА 1.
ИСКАТЬ В республика-ст МЕНЯЯ рп-10;
В КОНЦЕ ПЕРЕЙТИ К ош-1;
КОГДА республика = респ-ст (рп) СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ,
определение-пл. *
УСТАНОВИТЬ пл, пл-10 НА код-пола.
определение-гд.
ИСКАТЬ ОСОБО В статистика; В КОНЦЕ ПЕРЕЙТИ К ош-2;
КОГДА год ИЗ статистика (рп, пл, гд) => год ИЗ карта
175
ПЕРЕЙТИ К вывод.
ош-2.
ВЫДАТЬ 'НЕТ ГОДА' год ИЗ карта НА ппш маш.
ПЕРЕЙТИ К чтение-карт.
ош-1.
ВЫДАТЬ 'НЕТ РЕСПУБЛИКИ' республика НА пйш-маш.
ПЕРЕЙТИ К чтение-карт,
вывод.
ПОМЕСТИТЬ СООТВЕТСТВЕННО -статистика (рп, пл. гд)
В область-печати.
ПИСАТЬ строка ИЗ ПОЛЯ область-печати
. ПОСЛЕ ПРОДВИЖЕНИЯ 4 СТРОК.
ПОМЕСТИТЬ СООТВЕТСТВЕННО республика-10 (пл-10, рп-10)
В область-печати-10.
ПИСАТЬ строка ИЗ ПОЛЯ область-печати-10
ПОСЛЕ ПРОДВИЖЕНИЯ 1.
ПЕРЕЙТИ К чтение-карт,
конец-1.
ЗАКРЫТЬ вхфайл, вхкарты, выхфайл.
ОСТАНОВИТЬ РАБОТУ.
8. СОРТИРОВКА
Средства сортировки в языке Кобол 'обеспечивают упорядочение
записей файла в соответствии о определяемыми программистом на-
бором ключей и алфавитом. Операция сортировки производится над
записями специального рабочего файла сортировки
(сортируемого файла), описываемого в разделе данных программы в ин-
дикатором уровня ОС. Способ поставки записей в рабочий файл еор-
тировки и извлечения записей из него после окончания операции оп-
ределяется программистом в операторе СОРТИРОВАТЬ.
Сортировка выполняется о помощью имеющейся в составе опера-
ционной системы программы сортировки.
8.1. СРЕДСТВА РАЗДЕЛА ОБОРУДОВАНИЯ ДЛЯ СОРТИРОВКИ
8.1.1. Параграф СПЕЦИАЛЬНЫЕ-ИМЕНА
Если в операторе СОРТИРОВАТЬ используется фраза АЛФАВИТ
для указания основной последовательности кодов, которую нужно
применить при сравнении ключей сортировки, представляющих
нечисловые данные (буквенные, буквенно-цифровые, числовые-редак-
тируемые, групповые), то соответствующей последовательности ко-
дов должно быть присвоено имя в параграфе СПЕЦИАЛЬНЫЕ-
ИМЕНА секции конфигурации (см. п. 3.1.3).
8.1.2. Параграф УПРАВЛЕНИЕ-ФАЙЛАМИ
В параграфе УПРАВЛЕНИЕ-ФАЙЛАМИ секции ввода-вывода
во фразе ДЛЯ должны быть названы все файлы, используемые для
обеспечения ввода в сортировку и вывода из нее, а также сортируе-
мый файл.
176
Сортируемый файл описывается в следующем формате:
ДЛЯ имя-сортируемого-файла
НАЗНАЧИТЬ [целое] имя-реализации-1 [имя-реализации-2] ...
Имя-сортируемого-файла — это имя, указываемое в статье СМ2 и
используемое в качестве первого операнда оператора СОРТИРОВАТЬ.
Целое (только для ДОС ЕС) указывает число логических устройств,
доступных программе сортировки для использования в качестве рабо-
чих. Физические устройства, назначаемые логическим, могут, быть
двух типов: накопители на магнитных лентах (НМЛ) или накопители
на магнитных дисках- (НМД). Если для программы сортировки во фра-
зе ДЛЯ определены НМЛ, количество физических устройств должно
совпадать с количеством логических устройств, задаваемых целым во
фразе ДЛЯ. Если для программы сортировки во фразе ДЛЯ определе-
ны НМД, целое указывает количество участков, которые могут разме-
щаться на одном или нескольких физических устройствах.
Если для рабочих файлов используются накопители на магнитных
лентах, разрешается использовать от 3 до 9 устройств, если нако-.
пители на магнитных дисках — может быть определено от 1 до 8
логических устройств (участков). Физические устройства, назначае-
мые логическим устройствам сортировки, должны быть одного типа:
или накопители на магнитных лентах, или накопители на магнитных
дисках. Если целое не указано, транслятор подразумевает одно уст-
ройство для сортировки на магнитных дисках и три устройства для
сортировки на магнитных лентах.
Имя-реализации-1, имя-реализации-2 и т. д. образуются по тем же
правилам, что и имя-реализации. в других фразах НАЗНАЧИТЬ
(см. п. 3.2.1.2). Поле организации файла в имени-реализации для сор-
тируемого файла должно быть S, т. е. сортируемый файл создается и
обрабатывается как файл с последовательной организацией.
В операционной системе ДОС ЕС логические устройства и-имена,
под которыми рабочие файлы известны программе сортировки,, фик-
сированы. Первое рабочее устройство для каждого сортируемого фай-
ла в программе должно быть SYS001, второе—SYS002 и т. д. Таким
образом, для операции сортировки резервируется указанное количество
(целое во фразе НАЗНАЧИТЬ) рабочих устройств, начиная с SYS001.
Эти дополнительные рабочие устройства можно указать несколькими
именами-реализации во фразе НАЗНАЧИТЬ. Транслятор же рассмат-
ривает их как комментарий. Поле имени в именах-реализации должно
быть следующим: SORTWK1 для SYS001, SORTWK2 для SYS002
и т. д. Например, если сортируемому файлу доступны пять устройств
НМЛ, это может быть указано следующим образом:
ДЛЯ сорт-файл НАЗНАЧИТЬ 5 SYS001-UT-5010-S-SORTWK1.
Транслятором будут зарезервированы в качестве рабочих устройств
логические устройства с SYS001 по SYS005.
Если для рабочих устройств сортировки назначены НМД, то за-
дание на выполнение программы должно включать управляющие опе-
раторы DLBL о именами файлов от SORTWK.1 до SORTWKtn (tn —
177
количество рабочих устройств). Если для рабочих устройств назна-
чены НМЛ, то рабочие файлы сортировки не имеют меток.
Так как в операционной системе ОС ЕС вся информация о количест-
ве "и типе устройств для сортировки определяется во время выполнения
рабочей программы с помощью операторов управления заданиями,
фраза НАЗНАЧИТЬ для сортируемого файла рассматривается транс-
лятором как комментарий.
8.1.3, Параграф УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ
8.1.З.1. Фраза ПЕРЕПРОГОН
Стандартный формат фразы ПЕРЕПРОГОН (см. п. 3.2.2.1), где
момент создания контрольной точки определяется количеством обра-
ботанных записей файла, неприменим к сортируемому файлу. Необхо-
димость создания' контрольных точек в процессе сортировки указывает-
ся в параграфе УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ специальным
форматом фразы ПЕРЕПРОГОН.
Формат:
ПЕРЕПРОГОН НА имя-реализации
Наличие фразы ПЕРЕПРОГОН этого формата означает, что во
время выполнения всех операторов СОРТИРОВАТЬ, имеющихся в
программе, нужно воздавать записи контрольных точек в логические
интервалы, установленные программой сортировки. Отсутствие этого
формата фразы означает, что записи контрольных точек при выпол-
нении операторов СОРТИРОВАТЬ создавать не нужно.
Имя-реализации не должно совпадать ни с каким из имен реали-
зации, используемых во фразах НАЗНАЧИТЬ в параграфе УПРАВ-
ЛЕНИЕ-ФАЙЛАМИ, но должно образовываться по тем же правилам.
Оно может быть тем же, что и имя-реализации, указанное в стандарт-
ной фразе ПЕРЕПРОГОН.
8.1.З.2. Фраза ОБЩАЯ ОБЛАСТЬ
Фраза ОБЩАЯ ОБЛАСТЬ в параграфе УПРАВЛЕНИЕ-ВВОДОМ-
ВЫВОДОМ указывает, что два или более файлов должны использовать
одну и ту же область основной памяти во время обработки.
Формат:
f ЗАПИСИ )
СОРТИРОВКИ | имя-файла-1 {имя-файла-2} ...
Вариант ОБЩАЯ ОБЛАСТЬ ЗАПИСИ описан в п. 3.2.2.2.
Вариант ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ в унифицированном
языке Кобол предназначен для оптимизации распределения областей
памяти при сортировке. Однако, поскольку система отводит память
для сортировки автоматически, этот вариант фразы ОБЩАЯ ОБЛАСТЬ
трансляторами Кобола ЕС ЭВМ рассматривается как комментарий.
178
8.2. СРЕДСТВА РАЗДЕЛА ДАННЫХ ДЛЯ СОРТИРОВКИ
В секцию файлов программы, содержащей оператор СОРТИРО-
ВАТЬ, должны быть включены статьи описания файлов (ОФ) для всех
файлов, используемых для ввода в сортировку и вывода из нее. Здесь
Же дается информация об имени сортируемого файла, о типе, размере
и именах его записей. Эта информация указывается в статье описания
сортируемого файла, которая начинается с индикатора уровня ОС.
Для каждого файла, названного в качестве первого операнда в опера-
торе СОРТИРОВАТЬ, должна появиться статья описания сортируе-
мого файла в секции файлов.
Формат:
OG имя-сортируемого-файла
[МЕТОД ЗАПИСИ имя-реализации]
[ЗАПИСИ ДАННЫХ имя-данного-1 [имя-данного-2] ...]
[В ЗАПИСИ [ОТ целое-1 ДО] целое-2 ЛИТЕР].
Имя-сортируемого-файла должно быть указано во фразе ДЛЯ,
описывающей рабочие устройства для сортируемого файла. Это же
имя должно быть указано в качестве первого операнда в операторе
СОРТИРОВАТЬ.
Имя-реализации во фразе МЕТОД ЗАПИСИ может быть F, V или
S. Если сортируются записи формата S, в качестве рабочих устройств
сортировки могут использоваться НМД только в случае, если размер
логических записей не превышает объема дорожки на магнитном диске.
В противном случае должны использоваться НМЛ.
Фраза ЗАПИСИ ДАННЫХ указывает имена записей данных в сор-
тируемом файле.
Фраза В ЗАПИСИ указывает размер записей данных в сортируе-
мом файле. Фраза необязательна. Фактический размер и формат (фик-
сированный или переменный) записей устанавливается на основании
статей описания записей, связанных с соответствующей статьей ОС.
Когда в операторе СОРТИРОВАТЬ используются фразы ПОЛУЧАЯ
и ИСПОЛЬЗУЯ, размер записи, связанной в ОС, должен совпадать
с размером записей файлов, указанных во фразах ПОЛУЧАЯ и ИС-
ПОЛЬЗУЯ. Если какое-нибудь из описаний записей сортируемого
файла содержит фразу ПОВТОРЯЕТСЯ о вариантом В ЗАВИСИМО-
СТИ ОТ, подразумеваются записи переменного формата.
Полное описание фраз МЕТОД ЗАПИСИ, ЗАПИСИ ДАННЫХ,
В ЗАПИСИ дано в п. 4.2.
8.3. СРЕДСТВА РАЗДЕЛА ПРОЦЕДУР ДЛЯ СОРТИРОВКИ
8.3.1. Оператор СОРТИРОВАТЬ
Оператор СОРТИРОВАТЬ указывает информацию для управления
операцией сортировки. Эта информация необходима, чтобы с помощью
процедуры ввода или автоматически из файла, определенного фразой
179
ИСПОЛЬЗУЯ, передать в сортируемый файл записи, подлежащие сор-
тировке, рассортировать их в соответствии с выбранным набором клю-
чей и алфавитом и в конечной фазе операций сортировки сделать рас-
сортированные записи доступными процедуре вывода или поместить
их в файл, определенный фразой ПОЛУЧАЯ.
Формат:
СОРТИРОВАТЬ имя-файла-1
ПО
ВОЗРАСТАНИЮ!
.УБЫВАНИЮ J
КЛЮЧА имя-данного-1 [имя-данного-21 ...
( ВОЗРАСТАНИЮ 1
1ПР I УБЫВАНИЮ . J
(АЛФАВИТ имя-алфавита]
КЛЮЧА имя-даиного-3 [имя-данного-4] ...]
ПРОЦЕДУРА ВВОДА имя-секции-1 [ПО ймя-секции-2]
ИСПОЛЬЗУЯ имя-файла-2
ПРОЦЕДУРА ВЫВОДА имя-секции-3 [ПО имя-секции-4]
ПОЛУЧАЯ имя-файла-3
Имя-файла-1 — это имя, заданное в статье описания сортируемого
файла на уровне ОС (имя-сортируемого-файла).
Фраза ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА определяет
направление сортировки. Вариант ПО ВОЗРАСТАНИЮ обеспечивает
сортировку от наименьшего значения ключа к наибольшему, а вариант
ПО УБЫВАНИЮ — от наибольшего значения к наименьшему.
Каждое имя данного представляет данное, являющееся ключом.
Юно должно быть описано в записи, евязанной с именем сортируемого
файла. Ключи перечисляются слева направо в порядке убывания их
старшинства независимо от того, возрастающие они или убывающие.
В операторе СОРТИРОВАТЬ должна присутствовать по крайней
мере одна фраза ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА.
В одном операторе могут бытЬ указаны оба варианта. Если в операторе
указано несколько ключей, записи сортируются по имени-данного-1
в возрастающем или убывающем порядке, записи с одинаковым значе-
нием именн-данного-1 сортируются по имени-данного-2 в возрастаю-
щем или убывающем порядке и т. д.
Сравнение значений ключей производится в соответствии • типом
данного, являющегося ключом. Если ключи сортировки представляют
числовые данные (кроме внешних в плавающей точкой), их сравнение,
в целях сортировки записей выполняется в соответствии в их алгеб-
раическими значениями. Если ключи сортировки представляют не-
числовые данные или внешние с плавающей точкой, их сравнение
выполняется в соответствии с внутренней последовательностью кодов
ЕС ЭВМ (последовательностью ДКОИ) или специальной последова-
тельностью кодов (см. п. 3.1.3) в зависимости от-фраз АЛФАВИТ или
ПРОГРАММНЫЙ АЛФАВИТ.
Ключи сортировки должны удовлетворять следующим требова-
ниям:
а) быть физически размещены в одинаковой позиции и иметь одина-
ковый формат данных в каждой логической записи сортируемого фай-
180
ла. Если еб статьей описания сортируемого файла (ОС) связано не-
сколько описаний записей, подлежащих сортировке, ключи сорти-
ровки должны быть описаны по меньшей мере в одном из описаний
записей;
б) располагаться на фиксированном месте от начала записи, т. е.
они не могут быть размещены за переменной частью записи;
в) не содержать в статьях описания фразу ПОВТОРЯЕТСЯ или
подчиняться статьям, содержащим фразу ПОВТОРЯЕТСЯ;
г) их число не должно превышать 12, а сумма их длин не должна
быть больше 256 байт;
д) все поля ключей должны быть размещены в пределах первых
4092 байт логической записи ;
е) имена данных, являющихся ключами, могут быть уточнены.
Фраза АЛФАВИТ используется для указания имени основной
последовательности кодов, которая должна применяться для сорти-
ровки по ключам, представляющим нечисловые данные. Имя-алфа-
вита должно быть определено в параграфе СПЕЦИАЛЬНЫЕ-ИМЕНА.
Если указанное имя алфавита определяет ВНУТРЕННИЙ алфавит,
то основной последовательностью кодов для сортировки по нечисло-
вым ключам будет последовательность ДКОИ, если СПЕЦИАЛЬНЫЙ,
то основной последовательностью для сортировки будет последова-
дельность, определенная в п. 3.1.3. I
Если фраза АЛФАВИТ в операторе СОРТИРОВАТЬ не исполь-
зуется, но в разделе оборудования указана фраза ПРОГРАММНЫЙ
АЛФАВИТ, то при сортировке по нечисловым ключам будет применять-
ся последовательность кодов, определяемая фразой ПРОГРАММНЫЙ
АЛФАВИТ.
Если не указана ни фраза АЛФАВИТ, ни фраза ПРОГРАММНЫЙ
АЛФАВИТ, будет применяться внутренняя последовательность кодов
ЕС ЭВМ, т. е. последовательность ДКОИ.
Фраза ПРОЦЕДУРА ВВОДА и фраза ИСПОЛЬЗУЯ определяют
способы включения записей в сортируемый файл и описаны в п. 8.3.2.
Фраза ПРОЦЕДУРА ВЫВОДА и фраза ПОЛУЧАЯ определяют
способы извлечения записей из сортируемого файла после окончания
еортировки и описаны в п. 8.3.3.
Раздел процедур может содержать более одного оператора СОРТИ-
РОВАТЬ. Оператор СОРТИРОВАТЬ не должен появляться в декла-
ративных секциях, а также в процедурах ввода и вывода, связанных
о оператором СОРТИРОВАТЬ.
8.3.2. Включение записей в сортируемый файл.
, Оператор ПЕРЕДАТЬ
Способ поставки записей в сортируемый файл определяется фразой
ПРОЦЕДУРА ВВОДА или фразой ИСПОЛЬЗУЯ оператора СОРТИ-
РОВАТЬ.
Фраза ПРОЦЕДУРА ВВОДА оператора СОРТИРОВАТЬ ука-
вывает, что для обработки записей перед сортировкой и для включения
181
их в сортируемый файл в разделе процедур имеется специальная про-
цедура ввода.
Формат фразы:
ПРОЦЕДУРА ВВОДА имя-секции-1 [ПО имя-секции-2]
Процедура ввода представляет собой одну или более последова-
тельных секций раздела процедур. Имя-секции-1 — это имя первой
секции процедуры ввода, имя-секции-2 — имя последней секции про-
цедуры ввода. Если процедура ввода состоит из одной секции, ука-
зывается только имя-секции-1. Процедура ввода может включать
любые операторы, необходимые для подготовки записей к сортировке,
со следующими ограничениями:
а) процедура ввода не должна содержать операторов СОРТИРО-
ВАТЬ;
б) секции, образующие процедуру ввода, не могут быть частью
какой-нибудь процедуры вывода;
в) процедура ввода должна содержать по меньшей мере один опе-
ратор ПЕРЕДАТЬ.
Оператор ПЕРЕДАТЬ осуществляет собственно передачу записей
в сортируемый файл.
Формат:
ПЕРЕДАТЬ имя-сортируемой-записи [ИЗ ПОЛЯ идентификатор]
Имя-сортируемой-записи — это имя логической записи в описании
сортируемого файла. ,
Фраза ИЗ ПОЛЯ делает оператор ПЕРЕДАТЬ эквивалентным
следующим двум операторам:
ПОМЕСТИТЬ идентификатор В имя-сортируемой-записи
ПЕРЕДАТЬ имя-сортируемой-записи
Имя-сортируемой-записи и идентификатор не должны относитьея
к одной и той же области памяти. Пересылка из поля идентификатора
производится по правилам пересылки для групповых данных без фразы
СООТВЕТСТВЕННО.
По своим функциям оператор ПЕРЕДАТЬ подобен оператору
ПИСАТЬ, но служит исключительно для включения записей в рабочий
файл сортировки. При выполнении оператора информация, находя-
щаяся в области записи рабочего файла сортировки, передается в
файл. При этом в области, определяемой именем-сортируемой-записи,
данная информация становится недоступной, однако к ней все еще
можно обратиться в поле идентификатора, еели фраза ИЗ ПОЛЯ была
указана.
Оператор ПЕРЕДАТЬ может использоваться только внутри про-
цедуры ввода и имеет смысл лишь тогда, когда процедура ввода вы-
полняется под управлением оператора СОРТИРОВАТЬ. Еели опе-
ратор СОРТИРОВАТЬ не активен, программист должен позаботиться
о том, чтобы передачи управления к точкам внутри процедуры ввода
не вызвали выполнения оператора ПЕРЕДАТЬ. '
182
Если определена* процедура ввода, управление передается ей,
когда фаза ввода программы сортировки готова принять первую за-
пись. Фраза ПР0Ц2ДУРА ВВОДА функционирует подобно опе-
ратору ВЫПОЛНИТЬ формата 1. Все соглашения, касающиеся об-
ласти действия оператора ВЫПОЛНИТЬ, распространяются и на
процедуру ввода, когда она выполняется под управлением оператора
СОРТИРОВАТЬ. Поэтому если из процедуры ввода, выполняющейся
под управлением оператора СОРТИРОВАТЬ, осуществляется выход
к точке вне процедуры, программист должен обеспечить возврат в
процедуру ввода для нормального завершения процедуры и всей опе-
рации сортировки в целом. Как и в случае оператора ВЫПОЛНИТЬ,
оператором ВЫЙТИ можно определить общую конечную точку вы-
хода в процедуре ввода. После завершения процедуры ввода выпол-
няется собственно сортировка записей, включенных в сортируемый
файл.
Фраза ИСПОЛЬЗУЯ оператора СОРТИРОВАТЬ вызывает автома-
тическую передачу всех записей указанного файла в сортируемый
файл.
Формат»
ИСПОЛЬЗУЯ имя-файла-2
Имя-файла-2 должно быть именем стандартного последовательного
файла.
Во время выполнения оператора СОРТИРОВАТЬ файл, названный
во фразе ИСПОЛЬЗУЯ, не должен быть открыт. Для фразы ИСПОЛЬ-
ЗУЯ транслятор строит фиктивную процедуру ввода, в которой обес-
печивает открытие, чтение и закрытие имени-файла-2, а также передачу
записей в рабочий файл сортировки. Если для имени-файла-2 указаны
декларативные секции обработки ошибок и (или) меток, в ними будет
осуществлена связь.
8.3.3. Извлечение рассортированных записей.
Оператор ВЕРНУТЬ
Способ извлечения рассортированных записей из рабочего файла
сортировки определяется фразой ПРОЦЕДУРА ВЫВОДА или фразой
ПОЛУЧАЯ оператора СОРТИРОВАТЬ.
Фраза ПРОЦЕДУРА ВЫВОДА оператора СОРТИРОВАТЬ ука-
зывает, что для выборки записей в рассортированном порядке и для
обработки их после сортировки в разделе процедур программы имеется
специальная процедура вывода.
Формат фразы:
ПРОЦЕДУРА ВЫВОДА имя-секции-1 ЩО имя-секции-2]
Процедура вывода представляет'собой одну или более последова-
тельных секций раздела процедур. Имя-секции-1 — это имя первой
секции процедуры вывода; имя-секции-2 — имя последней секции про-
цедуры вывода. Если процедура вывода состоит из одной секции, ука-
183
зывается только имя-секций-1. Процедура вывода может включать
любые операторы, необходимые для обработки рассортированных
записей, со следующими ограничениями:
а) процедура вывода не должна содержать операторов СОРТИРО-
ВАТЬ;
б) секции, образующие процедуру вывода, не могут быть частью
какой-либо процедуры ввода;
в) процедура вывода должна содержать по меньшей мере один опе-
ратор ВЕРНУТЬ.
Оператор ВЕРНУТЬ осуществляет собственно извлечение записей
из рабочего файла сортировки.
Формат:
ВЕРНУТЬ ЗАПИСЬ имя-сортируемого-файла [В_ идентификатор]
В КОНЦЕ повелительный-оператор
Имя-сортируемого-файла — это имя, заданное в статье описания
рабочего файла сортировки (на уровне ОС в секции файлов).
Оператор ВЕРНУТЬ по функциям подобен оператору ЧИТАТЬ,,
но служит исключительно для получения в рассортированном порядке
записей из рабочего файла сортировки. Каждое выполнение оператора
ВЕРНУТЬ делает доступной очередную запись файла в области записи
сортируемого файла.
Фраза В идентификатор делает оператор ВЕРНУТЬ эквивалент-
ным следующим двум операторам:
ВЕРНУТЬ ЗАПИСЬ имя-сортируемого-файла .....
ПОМЕСТИТЬ имя-сортируемой-записи В идентификатор
где имя-сортируемой-записи—это имя записи, связанной в описанием
рабочего файла сортировки. Имя-сортируемой-записи и идентифи-
катор не должны относиться к одной и той же области памяти. Пере-
сылка в поле идентификатора производится по правилам пересылки
для групповых данных без фразы СООТВЕТСТВЕННО.
Оператор ВЕРНУТЬ может использоваться только внутри про-
цедуры вывода и имеет смысл лишь тогда, когда процедура вывода
выполняется под управлением оператора СОРТИРОВАТЬ. Если
последний не активен, программист должен позаботиться о том, чтобы
передачи, управления к точкам внутри процедуры вывода не вызвали
выполнения оператора ВЕРНУТЬ.
Если определена процедура вывода, управление передается ей
после того, как записи рассортированы и конечная фаза программы
сортировки готова вернуть первую запись. Процедура вывода, как и
процедура ввода, функционирует подобно оператору ВЫПОЛНИТЬ
формата 1 и подчиняется всем соглашениям, касающимся его области
действия (см. подробнее в*п. 8.3.2).
После завершения процедуры вывода управление передается опе-
ратору, следующему за оператором СОРТИРОВАТЬ.
Фраза ПОЛУЧАЯ оператора СОРТИРОВАТЬ вызывает автомати-
ческую передачу рассортированных записей из рабрчего файла сорти-
ровки в указанный во фразе файл.
184 .
Формат:
ПОЛУЧАЯ «мя-фзйла-3
Имя-файла-3 должно быть именем стандартного последовательного
файла.
Во время выполнения операторд СОРТИРОВАТЬ файл, названный
во фразе ПОЛУЧАЯ, не должен быть открыт. Для фразы ПОЛУЧАЯ
транслятор строит фиктивную процедуру вывода, в которой обеспе-
чивает извлечение записей из рабочего файла сортировки, а также
открытие, запись и закрытие имеии-файла-3. Если для имени-файла-3
указаны декларативные секции обработки ошибок и (или) меток, с ни-
ми будет осуществлена связь. .
8.3.4. Связь программы на Коболе
с системной программой сортировки
Связь программы на Коболе, содержащей оператор СОРТИРО-
ВАТЬ, с системной программой сортировки осуществляется через
программу библиотеки Кобола, которая присоединяется к рабо-
чей программе Кобола на этапе редактирования объектного моду-
ля. Системная программа сортировки загружается во время выпол-
нения рабочей программы. Схема взаимодействия оператора СОРТИ-
РОВАТЬ с системной программой сортировки показана на рис. 22.
Кроме оператора СОРТИРОВАТЬ для связи с программой сортировки
предназначены специальные регистры сортировки, использование
которых позволяет оптимизировать выполнение сортировки.
Регистр РАЗМЕР-ФАЙЛА-СОРТ служит для передачи программе
сортировки ориентировочного количества записей в файле, подлежа- -
щем сортировке. Если регистр не используется, программа сортировки
предполагает, что файл содержит максимальное количество записей,
которые могут обрабатываться при имеющемся объеме основной па-
мяти и количестве рабочих устройств. Если оценка, указанная в ре-
гистре РАЗМЕР-ФАЙЛА-СОРТ, превышает максимум, она1 будет
игнорироваться.
Регистр ПАМЯТЬ-СОРТ указывает объем основной памяти (в бай-
тах), доступной программе сортиро'вки, если он отличается от того
объема, который обычно используют средства сортировки (10 Кбайт
для ДОС ЕС, 15 Кбайт для ОС ЕС).
Регистр РЕЖИМ-СОРТ указывает наиболее часто встречающийся
размер записей, если сортируется файл с записями переменного раз-
мера. Если размер большинства записей в файле значительно отли-
чается от среднего размера записи, можно ускорить выполнение опера-
ции сортировки, указав в регистре РЕЖИМ-СОРТ наиболее часто
встречающийся размер записи. Если этот регистр не используется,
то подразумевается средняя длина записи. Например, если записи из-
меняются по длине от 20 до 100 байт, но большинство записей имеет
длину 30 байт, перед выполнением оператора СОРТИРОВАТЬ в РЕ-
ЖИМ-СОРТ необходимо поместить значение 30. Максимальный размер
вапивей, обрабатываемых средствами сортировки, равен 32 000 байт.
185
Регистр КОД-ВОЗ ВРАТА-СОРТ используется для передачи кода
завершения из программы сортировки в программу Кобола. После
завершения операции сортировки он содержит код возврата 0, если
сортировка была успешной, и код возврата 16, если сортировка прошла
неудачно. Если операция сортировки закончилась неудачно, а в про-
грамме не анализируется содержимое регистра КОД-ВОЗВРАТА-
СОРТ, то (только для ОС ЕС) на пишущую машинку пульта оператора
выводится сообщение. В ответ на это сообщение оператор может либо
продолжить выполнение программы, либо снять задание.
Программа би б - Программа
лиотеки Кобола сортиробми
Рис. 22. Связь оператора СОРТИРОВАТЬ с программой сортировки
Регистры РАЗМЕР-ФАЙЛА-СОРТ, ПАМЯТЬ-СОРТ И РЕЖИМ-
СОРТ могут получать управляющую информацию в рабочее время,
однако ни один из этих регистров не может использоваться в качестве
операнда в операторе ПРИНЯТЬ (а также в операторах ВЫДАТЬ
и ПЕЧАТАТЬ). Информация в эти регистры должна быть передана
до выполнения оператора СОРТИРОВАТЬ, например, так:
ПРИНЯТЬ размер-файла G CONSOLE.
ПОМЕСТИТЬ размер-файла В РАЗМЕР-ФАЙЛА-СОРТ.
Следует помнить, что регистры первоначально устанавливаются'
транслятором на нуль, но не восстанавливаются после выполнения
операции сортировки. Таким образом, если в программе есть несколько
186 • .
операторов СОРТИРОВАТЬ, значения регистров по завершении
одного оператора СОРТИРОВАТЬ будут сохраняться до начала дру-
гой операции сортировки, если они не модифицируются.
8.4. ПРИМЕР ПРОГРАММЫ С СОРТИРОВКОЙ
Приводимый ниже пример иллюстрирует сортировку записей,
содержащих сведения о продавцах (табельный номер, отдел, фами-
лия, адрес, размер выручки), с применением процедуры ввода. Порядок
сортировки следующий: по возрастанию номеров отделов (ПО ВОЗРА-
СТАНИЮ КЛЮЧА отдел) и по убыванию выручки (ПО УБЫВАНИЮ
КЛЮЧА выручка). Перед началом сортировки посредством процедуры
ввода (исключение-отделов-7-9) из сортировки исключаются записи
для продавцов из отделов 7 и 9. Остальные записи затем сортируются.
Получаемый рассортированный файл распечатывается для проверки
правильности результатов.
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, sorevn.
РАЗДЕЛ ОБОРУДОВАНИЯ.
СЕКЦИЯ КОНФИГУРАЦИИ.
ИСХОДНАЯ-МАШИНА. ЕС-1022.
РАБОЧАЯ-МАШИНА. ЕС-1022.
СЕКЦИЯ ВВОДА-ВЫВОДА.
УПРАВЛЕНИЕ-ФАЙЛАМИ.
ДЛЯ файл-ввода НАЗНАЧИТЬ SYS008-UT-5010-S.*
ДЛЯ файл-вывода НАЗНАЧИТЬ SYS007-UT-5010-S.**
ДЛЯ сорт-файл НАЗНАЧИТЬ 3 SYS001-UT-6010-S.***
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ ФАЙЛОВ.
ОС сорт-файл.
01 запись-распродажи.
02 таб-ном. Ш 9(6).
02 отдел Ш 9(3).
02 выручка Ш 9(7)Т99.
02 имя-и-адрес Ш Х(62).
ОФ файл-ввода МЕТКИ ОПУЩЕНЫ.
01 карта-ввода.
02 таб-иом Ш 9(6).
02 отдел Ш 9(3).
02 выручка Ш 9(7)Т99.
02 имя-и-адрес Ш Х(62).
ОФ файл-вывода МЕТКИ ОПУЩЕНЫ.
01 карта-вывода.
02 таб-ном Ш 9(6).
02 отдел Ш 9(3).
02 выручка Ш 9(7)Т99.
02 имя-и-адрес Ш Х(62).
* Только для ДОС ЕС. Для ©С EG имя реализации может быть, например,'
таким: UT-5010-S-INFILE
** Только для ДОС ЕС. Для OG ЕС имя реализации может быть, напри-
мер, таким: UT-5010-S-SORTOUT
*** Только для ДОС ЕС. Для OG EG имя реализации может быть, напри-
мер, таким: UT-5010-S-SORTWK01
187
РАЗДЕЛ ПРОЦЕДУР,
п-сорт. СОРТИРОВАТЬ сорт-файл
ПО ВОЗРАСТАНИЮ КЛЮЧА отдел ИЗ запйгь-распродажи
ПО УБЫВАНИЮ КЛЮЧА выручка ИЗ запись-распродажи
ПРОЦЕДУРА ВВОДА исключение-отделов-7-9
ПОЛУЧАЯ файл-вывода.
СЕКЦИЯ проверка-результатов.
п-р-1. ОТКРЫТЬ ВХОДНОЙ файл-вывода.
п-р-2. ЧИТАТЬ файл-вывода В КОНЦЕ ПЕРЕЙТИ К п-р-завершение.
ВЫДАТЬ отдел ИЗ карта-вывода, выручка ИЗ карта-вывода.
п-р-3. ПЕРЕЙТИ К п-р-2.
п-р-завершение. ,
‘ ЗАКРЫТЬ файл-вывода.
ОСТАНОВИТЬ РАБОТУ.
СЕКЦИЯ исключение-отделов-7-9.
и-о-1. ОТКРЫТЬ ВХОДНОЙ файл-ввода.
и-о-2.
ЧИТАТЬ файл-ввода В КОНЦЕ ПЕРЕЙТИ К и-о-завершение.
и-о-3.
ЕСЛИ'отдел ИЗ карта-ввода = 7 ИЛИ 9 ПЕРЕЙТИ К ио-2
ИНАЧЕ ПОМЕСТИТЬ СООТВЕТСТВЕННО карта-ввода
В запись-распродажи
ПЕРЕДАТЬ запись-распродажи
ПЕРЕЙТИ К и-о-2.
в-о-завершение. ЗАКРЫТЬ файл-ввода.
и-о-выход. ВЫЙТИ.
9. ГЕНЕРАТОР ОТЧЕТОВ
9.1. ОСНОВНЫЕ ПОНЯТИЯ
Генератор отчетов в Коболе предоставляет программисту средства
автоматического создания печатных отчетов, Хотя печатные отчеты при
программировании на Коболе могут быть созданы и без применения
генератора отчетов, средства генератора отчетов облегчают создание
отчетов, обеспечивая автоматическое выполнение таких операций, как
формирование печатных строк, подсчет количества строк на странице,
нумерация страниц, получение итоговых сумм, определение момента
вывода итоговых строк, заголовков и концовок страниц, очистка счет-
чиков сумм и т. п. От программиста требуется лишь описать формат
отчета, т. е. указать размер страницы и место по странице, где должны
печататься, например, заголовки и концовки, строки с итоговыми сум-
мами и другие элементы отчета; указать данные, которые должны сум-
мироваться при выводе отчета или служить источником информации
для элемента строки отчета; определить место появления элемента в
печатной строке, указывая только номер столбца.
Рассмотрим основные понятия генератора отчетов на примере от-
чета, представленного на рис. 23 — 28. Входной информацией для
создания этого отчета является файл на перфокартах, состоящий из
записей следующей структуры:
188
. ТОРГОВАЯ ФИРМА-
1
ОТЧЕТ РАСХОДОВ ЗА КВАРТАЛ--------------
ЯНВАРЬ РАСХОДЫ 2 |
МЕСЯЦ ДЕНЬ ОТДЕЛ КОЛ-ПОКУПОК ТИП стоимость ОБЩ-СТОИМ
ЯНВАРЬ ПОКУПКИ 01 А02 И СТОИМОСТЬ ЗА 1 2 -01 2 в 16.00 16.00 16 .00
*♦♦♦♦♦•*♦♦*♦♦♦♦♦♦»♦♦***•*•♦*♦*♦♦**»*•♦♦♦**♦♦♦♦**♦*****♦♦******»*•♦*
ЯНВАРЬ ПЭ АП1 О R 9 АЛ 3
V* /1U1 * X* 4<vV —
ДП4 In Д • 1П ПО 4
AV» 1U A Iv.vV " 1
Дй4 1П Л ЯП ПП 5
AD» 1 V OV * VU
ПОКУПКИ И СТОИМОСТЬ ЗА 1—02 22 92.00 108.00 | ЯНВАРЬ 05 А01 2 , В 2.00 ПОКУПКИ И СТОИМОСТЬ ЗА 1—05 .2 ’ 2.00 110.00
♦•♦••••♦••♦«•♦♦♦♦♦♦♦♦«•♦♦♦♦«««♦«♦♦•«♦♦♦♦Ф»*******»**»**’**»**#*»**!»***************^ ♦*♦****♦*♦♦**♦♦♦♦*•
ЯНВАРЬ 08 А01 8 В 12.* 48
А01 10 А 10.00
А01 20 Д 38.40
ПОКУПКИ И СТОИМОСТЬ ЗА 1-08 88 60.88 170.88
•***♦*♦**♦♦*♦*♦«♦♦»*♦•♦♦♦•»• *************************** *$*»*»♦♦♦♦*♦»»♦♦♦********♦*«♦»♦♦♦♦♦♦*»♦♦♦♦»♦•♦♦<
ЯНВАРЬ 13 А00 А00 4 1 В а 6.24 8.00
ПОКУПКИ И СТОИМОСТЬ ЗА 1—13 5 14.24 185.12
• • * « И.О*Ж#..*»*Ж*»А**> *******
ЯНВАРЬ 15 А00 10 Д 19.20
А02 1 в . 8.0</
ПОКУПКИ И СТОИМОСТЬ ЗА 1—18 11 27.20 212.32
и»♦♦»♦**♦*♦**♦*♦♦♦♦••
ЯНВАРЬ 21 АОЗ 10 Е 30.00
АОЗ 10 F 25.00
АОЗ 10 G 50.00
ПОКУПКИ И СТОИМОСТЬ ЗА 1—21 30 105.00 ' 317.32
.****«*•*«**< и*»*»***♦**♦«**.. >*«»**•****< м*♦♦»*******♦♦♦*♦••<
ЯНВАРЬ 23 А00 5 А 5.00
ПОКУПКИ И СТОИМОСТЬ ЗА 1—23 5 5.00 322.32
••«•*•*»*».¥****************« »М** + «*М****4************* **************************** ********************
6
ЛИСТ-01
Рис. 23. Первая страница отчета.
189
ЯНВАРЬ РАСХОДЫ (ПРОДОЛЖЕНИЕ)------------------- 2
МЕСЯЦ ДЕНЬ ОТДЕЛ' КОЛ-ПОКУГ.ОК ТИП ‘СТОИМОСТЬ 0БЩ-8Т0ИМ-1
"" 1
ЯНВАРЬ 26 А04 5 - А04 5 ПОКУПКИ И СТОИМОСТЬ ЗА 1—26 10 А в 5.00 — 7.80 12 80 335.12- 3 4 ‘5
ЯНВАРЬ 27 АОО 6 В А00 15 в ПОКУПКИ И СТОИМОСТЬ ЗА 1—27 21 9.36 120.00 129.36 464 48 1
*••••*••«***»*«••******»♦♦♦***•**»♦••*♦♦*•»♦»**..*•♦•*•* ЯНВАРЬ 30 А00 2 А02 10 А02 1 А04 15 А04 10 ПОКУПКИ И СТОИМОСТЬ ЗА 1—30 38 в А в В в 3. 12 10.60 8.00 23.40 80.00 124.52 589 ПО
ЯНВАРЬ 31 АОО 1 А04 6 А А 1.00 6.00 . -
ПОКУПКИ И СТОИМОСТЬ ЗА 1—31 т *****************************»*♦•♦**♦♦♦•**.♦*»» *«*•**•• ОБЩАЯ СТОИМОСТЬ ЗА ЯНВАРЬ . 1 7.00 696.00 — 596.00 7
лист—оз
Рио. 24. Вторая страница отчета
190
ФЕВРАЛЬ РАСХОДЫ-
2
МЕСЯЦ ДЕНЬ ОТДЕЛ КОЛ-ПОКУПОК ТИП СТОИМОСТЬ ОБЩ-СТ ФЕКРАПК 14 АП4 1ft А 1П ПП о им
3
«пл 9 R 419 - -
4
Аул *• D О . 1 л ”
А02 1 в 8 00 АОЗ 15 Q 75.00 А04 5 В 7.80 А05 8 А 8.00 А05 5 в 40.00 -
I 5 И
ПОКУПКИ И СТОИМОСТЬ ЗА 2—15 46 151 92 74 % 7.92 1
*♦••••••♦♦♦**••♦♦♦*♦•♦*******«*•*•**»»«*••< »♦«'**«************♦*♦«
ФЕВРАЛЬ 16 А02 2 О 16.00
АОв 10 А 10.00
А07 10 F 25.00
ПОКУПКИ И СТОИМОСТЬ ЗА 2—16 22 51.00 798-92’
••♦••*•*•«••••***•*«***««*« ••««**««««*«««**»«*«*««****««****«*««**«*************«*4********«******О**4
ФЕВРАЛЬ 17 А07 10 Е 30.00
А07 10 G 50.00
ПОКУПКИ И СТОИМОСТЬ ЗА 2—17 20 80.06 878.92
*♦»•*»*♦♦******•♦♦♦*♦*♦♦♦**'*»•»♦♦»♦♦**»*•«♦*♦*♦♦♦*♦♦♦♦♦♦*♦»♦**♦♦*****♦*****♦♦*♦*♦*♦
ФЕВРАЛЬ 21 А06 20 . А 20.00
А06 20 В 31.20
АСв 20 в 160 00
А06 20 д 38.40
А06 20 В 60.00
А06 20 . F 50.00
А06 20 G 100.00
ПОКУПКИ И СТОИМОСТЬ ЗА 2—21 140 459.60 1338 52
•*•***•«***•*****•«*•****«*4♦♦*♦♦«»*♦*♦♦♦***♦♦♦****♦*♦♦ ♦**«»»*♦*******♦•♦<
ФЕВРАЛЬ 27 А01 21 Д 40.32
ПОКУПКИ И СТОИМОСТЬ ЗА 2—27 21 40.32 1378.84
***«««*•*«***•**.***«»***•••****«••******•**********♦*«« '*««*»*9***>»*****«*********41l**********9****»S««f
ФЕВРАЛЬ 28 А02 3 В 4.68 А02 5 G- 40 00 АОЗ 15 Е 45.00*
ПОКУПКИ И СТОИМОСТЬ ЗА 2—28 23 89.68 1468.52
•♦•♦***•**•****♦************♦*•***•♦**•**♦»♦*****♦♦*****»•♦♦♦♦•♦♦♦♦♦♦**♦»♦*♦**♦**♦**♦*************«♦»«?
ОБЩАЯ СТОИМОСТЬ ЗА ФЕВРАЛЬ
872.52
6
лист-оз
Рис. 25. Третья страница отчета
191
МАРТ
РАСХОДЫ
2
МЕСЯЦ ДЕНЬ ОТДЕЛ КОЛ-ПОКУПОК ТИП
МАРТ ' 01 А02 5 А
А02 ! С
АОЗ 23 G
ПОКУПКИ И СТОИМОСТЬ ЗА 3-0! 31
L СТОИМОСТЬ ОБЩ-СТОИМ
r пп 3
о пп
4
и. ии
123.00 5
138 00 1806 52 I
*•♦♦**♦*♦***»*♦♦*♦♦♦♦♦♦♦♦*♦**•*«»»♦♦***»•♦♦»«♦••***♦**♦*•♦***♦*»•**♦♦**♦•♦♦**♦***•♦♦•***♦*»♦•»♦*»♦♦•»•♦*
МАРТ 06 А02 5
ПОКУПКИ И СТОИМОСТЬ ЗА 3—06 . Б
5.00
5.00
16П.Б2
ее**************************•**♦**•»•♦♦♦♦*«*»♦»♦**♦**»♦
МАРТ 07 А02 & А 5.00
ПОКУПКИ И СТОИМОСТЬ ЗА 3 -07 5 5.00 1616.62
*************************** *************************** »«***♦«*»♦♦♦♦♦»»***♦»♦♦*♦**’*♦**•*•♦»***»*»**♦«*
МАРТ 13 А02 10 А » 10.00
ПОКУПКИ И СТОИМОСТЬ ЗА 3—13 10 10.00 1626.52
•»««*********************** *****»****«**«************4 ♦ ♦♦*«*»♦»*♦♦♦♦♦**»»*♦»•♦♦•♦* *******»»*««4'ff
МАРТ 15 А01 21 А 21.00
А02 1 А 1.00
A0J' 15 " F 37.50
- А06 & Е 13.00
А 06 ' ’ 5 F 12.50
ПОКУПКИ И СТОИМОСТЬ ЗА 3—15 47 87.00 1713.52
в************************************************************************* **«***««****»***««*«*****«t|
МАРТ 20 АОЗ 15 Е 45.00
ПОКУПКИ И СТОИМОСТЬ ЗА 3—20 15 45.00 1758.52
•♦♦♦♦♦♦♦*»*♦**»♦»»»♦**♦♦»»♦<»♦»♦»♦*••»*♦♦♦♦*♦♦♦«**«♦♦♦»♦»♦♦»*♦♦♦»♦»***•*»** •««***••*****••*****»****•*' МАРТ 21 А02 15 А 15.00 • АОЗ 13 F 37.50 ПОКУПКИ И СТОИМОСТЬ ЗА 3—21 30 - 52.30 1811 .02
***************t***********^***********************************************************«**«**********tt|
МАРТ 23 А02 2 А 2.00
ПОКУПКИ И СТОИМОСТЬ ЗА 3—23 2 2.00 1813.02
***************************4****************************************************«************4*******ф<)
МАРТ 25 A03 30 F 73.00
ПОКУПКИ И вТОИМОСТЬ ЗА 3—23 30 73.00 1 888.02
ЛИСТ—04
Рис. 26. Чв1вертая страница отчета
192
МАРТ РАСХОДЫ ((ПРОДОЛЖЕНИЕ).
-------- 2
МЕСЯЦ ДЕНЬ ОТДЕЛ КОЛ-ПОКУПОК ТИП СТОИМОСТЬ овщ-втоим—1
МАРТ 26 А01 1 А 1.00 — 3
ПОКУПКИ И СТОИМОСТЬ ЗА 3-26 1 1.00 1889.02- 5
♦♦♦♦♦♦♦♦«♦♦•♦♦♦♦♦♦♦♦•♦•♦♦•О ...................и
МАРТ 29 А01 6 G 48.00
ПОКУПКИ И СТОИМОСТЬ ВА 8—29 6 48.00 1937.02
••«*••**••••••*•*••'••••**•**•**•********•*•*•««
МАРТ 81 АОЗ 20 1 В 60.00
ПОКУПКИ И СТОИМОСТЬ ЗА 8—81 20 60.00 |997.02
ОБЩАЯ GTOHMOSTb ЗА МАРТ •
628.50------------- 7 J
6
ЛИСТ—05'
Рис. 27. Пятая страница отчета
Рис. 28. Шестая страница отчета
7 Зак. 73
193
в колонках 3—5 — номер торгового отдела;
в колонках 8—9 — количество покупок,
в колонке 11 — тип покупки;
в колонках 12 — 13 — месяц;
в колонках 14 — 15 — день месяца;
в колонках 17 — 21 — стоимость покупок.
Файл упорядочен по месяцам и дням месяца. В отчете суммируется
стоимость покупок за день, месяц и по всему отчету (за квартал).
Логической единицей отчета, аналогичной записи данных файла,
является группа отчета. Группа отчета обычно представляет
собой одну или несколько печатных строк. Каждая группа отчета от-
носится к одному из следующих типов: заголовок отчета, заголовок
страницы, управляемый заголовок, фрагмент, управляемая концовка,
концовка страницы, концовка отчета.
В отчете на рис. 23 — 28 заголовок‘отчета представлен двумя стро-
ками, отмеченными цифрой 1. Заголовок отчета появляется в отчете
только один раз и может быть оформлен на отдельной странице. Циф-
рой 2 отмечена гру ппа отчета, представляющая заголовок страницы.
Эта группа отчета также состоит из двух строк и появляется в начале
каждой страницы отчета. Основной группой отчета является фрагмент,
отмеченный цифрами 3 и 4. Он формируется из записи входного файла.
Во фрагменте 4 с помощью специальной фразы генератора отчетов по-
давляется повторная печать названия месяца и дня. Итоговые суммы
(за день, месяц и квартал) представляются в группах отчета, которые
называются управляемыми концовками (отмечены соответственно
цифрами 5, -7 и 8). Каждая управляемая концовка связывается с не-
которым данным, которое называется управляющим, и появляется
в отчете, когда изменяются значения управляющего данного, связан-
ного с этой концовкой. Так, управляемая концовка 5 связана е управ-
ляющим данным «день» и появляется в отчете, когда происходит изме-
нение значения дня месяца. Управляемая концовка 7 связана с уп-
равляющим данным «месяц». Она является управляемой концовкой
более высокого уровня, чем 5, так как изменение месяца всегда предпо-
лагает изменение и дня месяца. Когда обнаруживается изменение
значения управляющего данного, будем говорить, что происходит
прерывание управления. Наивысшим уровнем в иерар-
хии управляемых концовок является конец отчета. Никакое конкрет-
ное данное с этим уровнем не связывается, однако им обусловливается
появление группы отчета, отмеченной на рис. 28 цифрой 8. На каждой
странице имеется концовка (отмечена на рис. 28 цифрой 6). В конце
отчета представлена концовка отчета (9). Она появляется в отчете
только один раз.
Управляемые заголовки (па рис. 23 — 28 не представлены) так
же, как и управляемые концовки, связываются с управляющими дан-
ными и появляются в отчете при изменении значения соответстующего
управляющего данного в начале управляемой группы. Например,
в данном отчете, строка из звездочек в управляемой концовке по дню
(отмечена цифрой 5) может быть определена как управляемый заго-
ловок для этого же управляющего данного. Однако в этом случае та-
194
кая строка появилась бы и после заголовка перв й страницы перед
первым фрагментом.
Набор групп отчета, выдаваемый для одного и того же значения
управляющего данного, называется управляемой группой.
Каждая управляемая группа может начинаться управляемым заголов-
ком, заканчиваться управляемой концовкой и содержать в себе группы
отчета типа ФРАГМЕНТ, сгенерированные в промежутке между двумя
прерываниями управления соответствующего уровня.
Генератор отчетов ведет автоматически счетчик страниц и счетчик
строк на странице. Содержимое этих счетчиков доступно программисту
посредством зарезервированных слов СЧЕТЧИК-СТРОК и СЧЕТ-
ЧИК-СТРАНИЦ, представляющих имена специальных регистров.
В отчете на рис. 23 — 28 СЧЕТЧИК-СТРАНИЦ поставляет информа-
цию о номере текущей страницы для концовки страницы.
Совокупность групп отчета трех типов: фрагментов, управляемых
заголовков и управляемых концовок — составляет тело отчета.
Группы отчета этих типов будут также называться группами тела
отчета.
Формат каждого отчета определяется программистом в секции
отчетов раздела данных, которая является последней секцией этого
раздела. Вывод отчета представляет, по существу, запись в выходной
файл, поэтому кроме описания отчета в секции отчетов програм-
мист должен обеспечить в секции файлов описание файла (или макси-
мум двух файлов), в который будет записываться отчет. В разделе
оборудования для этого файла, как и любого другого файла, должен
быть определен тип назначаемого периферийного устройства. Файл
отчетов — стандартный последовательный файл, которому может быть
назначено любое устройство вывода, допустимое в Коболе.
Секция отчетов состоит из статей двух типов:
статей описания отчета (с индикатором уровня 00), которые опи-
сывают физические характеристики формата отчетов;
статей описания групп отчета, которые описывают данные отчета
и их связь с форматом отчета.
В статье описания отчета указываются максимальное количество
строк на странице, границы областей страницы для печати групп
отчета каждого типа и имена управляющих данных отчета.
В статье описания группы отчета определяется тип группы и ее раз-
мещение на странице, формат входящих в ее состав данных, их разме-
щение по отношению к другим данным внутри группы отчета и особен-
ности управления, связанные с представлением данного в группе. Для
указания значений, которые должны быть представлены в группе отче-
та, используются три фразы: ИСТОЧНИК, СУММА и ЗНАЧЕНИЕ.
Фраза ИСТОЧНИК указывает, что значением элемента группы отчета
должно быть значение данного, определенного в какой-нибудь другой
статье раздела данных, например, в секции файлов или в секции рабочей
памяти (генератор отчетов автоматически помещает данные в строку
отчета в нужное время). Фраза СУММА указывает, что данные являют-
ся результатом автоматического суммирования генератором отчетов
каких-либо данных отчета или предыдущих результатов суммирова-
7*
195
ния. Фраза ЗНАЧЕНИЕ определяет постоянную информацию, ко-
торая указывается в этой фразе в виде литерала.
Таким образом, с помощью статьи описания отчета и статей опи-
сания групп отчета полностью определяется содержание, формат и
операции по суммированию, необходимые для вывода отчета.
В разделе процедур вывод отчета обеспечивается тремя основными
операторами: НАЧАТЬ, ГЕНЕРИРОВАТЬ, ’ЗАКОНЧИТЬ.
Оператор НАЧАТЬ выполняет подготовительное функции для
отчета, аналогичные функциям оператора ОТКРЫТЬ для файла.
Оператор ГЕНЕРИРОВАТЬ обеспечивает вывод отчета и выпол-
няет, в частности, функции оператора ПИСАТЬ. Подобно тому как
в операторе ПИСАТЬ программист указывает имя записи выходного
файла, в-операторе ГЕНЕРИРОВАТЬ он должен указать имя группы
отчета типа ФРАГМЕНТ. Группы отчета всех других типов выводятся
генератором отчетов автоматически на основании информации о фор-
мате отчета, указываемой программистом в секции отчетов. При этом
увеличиваются и, если требуется, восстанавливаются счетчики, дан-
ные из входных файлов пересылаются в поля данных статьи описания
группы отчета, проверяются управляющие данные и, когда возникает
прерывание управления, печатаются требуемые дополнительные стро-
ки, например итоговые.
. Оператор ЗАКОНЧИТЬ завершает обработку отчета. Его действия
для отчета аналогичны действиям оператора ЗАКРЫТЬ для файла.
В декларативной части раздела процедур с помощью оператора
ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ для группы отчета может быть оп-
ределена декларативная процедура. Эта процедура, позволяет выпол-
нить дополнительную обработку перед печатью такой группы отчета,
вывод которой обеспечивается генератором отчетов автоматически
и момент вывода которой не может быть предопределен.
Пример программы для выдачи отчета, вид которого изображен на
рис. 23 — 28, приведен в п. 9.6.
9.2. СТАТЬЯ ОПИСАНИЯ ФАЙЛА ОТЧЕТОВ
В СЕКЦИИ ФАЙЛОВ
В секции файлов раздела данных должны быть даны статьи опи-
сания файлов, в которые будут записываться отчеты. Статья описания
файла обеспечивает информацию о физической структуре и иденти-
фикации файла, именах записей и именах отчетов, относящихся к дан-
ному файлу.
Общий формат:
ОФ имя-файла
[фраза В БЛОКЕ ]
[фраза В ЗАПИСИ]
[фраза МЕТОД ЗАПИСИ]
фраза МЕТКИ
[фраза ЗНАЧЕНИЕ]
[фраза ЗАПИСИ ДАННЫХ]
фраза ОТЧЕТ.
196
Фразы В БЛОКЕ, МЕТОД ЗАПИСИ, МЕТКИ и ЗНАЧЕНИЕ для
файла отчетов имеют такой же синтаксис и семантику, как и для обыч-
ного стандартного последовательного файла.
9.2.1. Фраза ОТЧЕТ
Фраза ОТЧЕТ используется для указания имен отчетов, которые
будут записываться в файл. Она устанавливает связь между статьей
описания файла и статьями описания связанных е файлом отчетов.
Формат:
( ОТЧЕТ ] , .
1 птигУты ( имя-отчета-1 [имя-отчета-2] ...
Слово ОТЧЕТ и ОТЧЕТЫ эквивалентны.
Имена отчетов могут относиться к отчетам, имеющим различные
размеры и формат. Порядок перечисления имен отчетов во фразе без-
различен. Каждому имени отчета, указанному в статье ОФ в секции
файлов, должна соответствовать статья описания отчета с индикатором
уровня 00 в секции отчетов. Имя одного и того же отчета может появ-
ляться во фразе ОТЧЕТ не более, чем в двух статьях описания файлов.
9.2.2. Фраза ЗАПИСИ ДАННЫХ
Фраза ЗАПИСИ ДАННЫХ называет имена логических записей
файла.
Формат:
ЗАПИСИ ДАННЫХ имя-данного-1 [имя-данного-2] ...
Эта фраза требуется, если наряду е группами отчета в файл пред-
полагается помещать записи данных. Если эта фраза используется,
за статьей описания файла должны следовать статьи описания записей,
указанных во фразе ЗАПИСИ ДАННЫХ. Для вывода записей данных
в файл отчетов должен использоваться оператор ПИСАТЬ с фразой
ПОСЛЕ ПРОДВИЖЕНИЯ. Хотя фраза ЗАПИСИ ДАННЫХ в ста-
тье описания файла отчетов допускается, вывод этих записей проис-
ходит не под управлением генератора отчетов, что усложняет управ-,
ление форматом отчета. Несогласованное управление может привести
к непредвиденным результатам.
9.2.3. Фраза В ЗАПИСИ
Фраза В ЗАПИСИ используется для указания максимального раз-
мера записи отчета.
Формат:
В ЗАПИСИ [ОТ целое-1 ДО] целое-2 ЛИТЕР
В размере записей отчета всегда должен учитываться байт для уп-
равляющего символа печати, который не появляется на печати, но
резервируется транслятором в записях отчетов, и байт для идентифи-
197
цирующего кода отчета, если в файл записывается несколько отчетов,
описанных с фразой С КОДОМ в статьях описания этих отчетов
(см. п. 9.3.1.2). Если фраза В ЗАПИСИ опущена, размер записи пред-
полагается равным 133 байтам.
9.3. СЕКЦИЯ ОТЧЕТОВ
В секции отчетов описываются физические параметры формата
отчета, характеристики данных, составляющих отчет, и их взаимо-
связь с форматом.
Секция отчетов должна начинаться с заголовка СЕКЦИЯ ОТЧЕ-
ТОВ, заканчивающегося точкой. За заголовком секции отчетов сле-
дуют статьи описания отчетов, которые сопровождаются статьями
описания групп отчетов, входящих в этот отчет.
9.3.1. Статья описания отчета
Статья описания отчета именует отчет, определяет размер и формат
страницы отчета, указывает имена управляющих данных и идентифи-
цирующий код отчета. Статья описания отчета начинается в индика-
тора уровня 00.
Формат:
00 имя-отчета
[фраза РАЗМЕР СТРАНИЦЫ)
[фраза С КОДОМ]
[фраза УПРАВЛЕНИЕ).
Имя-отчета должно быть уникальным, так как уровень ОО яв-
ляется наивысшим уровнем иерархии в секции отчетов. Имя-отчета
должно появиться во фразе ОТЧЕТ по крайней мере одной статьи
описания файла, в который будет записываться отчет.
Фразы, следующие за именем-отчета, необязательны и порядок их
появления в статье описания отчета может быть любым.
9.3.1.1. Фраза РАЗМЕР СТРАНИЦЫ
Фраза РАЗМЕР СТРАНИЦЫ определяет размер и области стра-
ницы, в которых могут появляться группы отчета определенного тина.
Формат: '
РАЗМЕР СТРАНИЦЫ целое-1 СТРОК
[ЗАГОЛОВОК целое-2]
[ПЕРВЫЙ ФРАГМЕНТ целое-3)
[ПОСЛЕДНИЙ ФРАГМЕНТ целое-4]
[КОНЦОВКА целое-5]
Целое-1 определяет длину страницы отчета в терминах числа строк
и должно быть не более чем трехзначным числом. Определяемая це-
лым-1 длина страницы может не совпадать с длиной, задаваемой управ-
ляющей перфолентой печатающего устройства.
198
Целое-2, целое-3, целое-4 и целое-5 представляют номера строк в
пределах страницы, определенной целым-1, и устанавливают раз-
деление страницы на области, в которых может появиться та или иная
группа отчета.
Вариант ЗАГОЛОВОК целое-2 указывает начало области, в кото-
рой могут располагаться заголовок отчета и заголовок страницы. Ни
одна печатная группа не может начаться перед строкой с номером
целое-2, т. е. строки страницы от 1 до целое-2 образуют верхнее пустое
поле. Целое-2 должно быть больше или равно 1.
Заголовок Заголовок Фрагменты и Управляемые КонцоВка
и концоВка страницы управляемые концоВка страницы
ЗАГОЛОВОК отчета еаголоВка
целое-2 Г~ " ————
ПЕРВЫЙ ФРАГМЕНТ
целое-3
ПОСЛЕАНИЙ ФРАГМЕНТ
целое -4
КОНЦОВКА
целое-5
РАЗМЕР СТРАНИЦЫ 1
целое-1
Рис. 29. Формат страницы, определяемый фразой
РАЗМЕР СТРАНИЦЫ
Вариант ПЕРВЫЙ ФРАГМЕНТ целое-3 указывает начало области,
в которой могут располагаться группы тела отчета (фрагменты, уп-
равляемые заголовки или управляемые концовки). Целое-3 должно
быть больше или равно целому-2.
Вариант ПОСЛЕДНИЙ ФРАГМЕНТ целое-4 указывает конец
области, в которой могут располагаться управляемые заголовки и фраг-
менты отчета. Целое-4 должно быть больше или равно целому-3.
Вариант КОНЦОВКА целое-5 указывает конец области, в которой
могут располагаться управляемые концовки. Целое-5 должно быть
больше или равно целому-4 и не должно превышать целое-1. После
целого-5 располагается нижнее пустое поле страницы.
Разделение страницы на области указанием целых во фразе РАЗ-
МЕР СТРАНИЦЕ! иллюстрируется рис. 29.
199
Таблица 24
Гип группы, которая может быть представлена в области Номер первой строки области Номер последней •троки области
Заголовок отчета,, описанный с фразой СЛЕДУ- ЮЩАЯ ГРУППА НА СЛЕДУЮЩЕЙ СТРАНИ- ЦЕ Концовка отчета, описанная с фразой НОМЕР СТРОКИ НА СЛЕДУЮЩЕЙ СТРАНИЦЕ Целое-2 Целое-2 Це лое-1 Целое-1
Заголовок отчета, описанный без фразы СЛЕДУ- ЮЩАЯ ГРУППА НА СЛЕДУЮЩЕЙ СТРАНИ- ЦЕ Заголовок страницы Целое-2 Целое-2 Цёлое-3 минус 1 Целое-3 минус 1
Управляемый заголовок Фрагмент Целое-3 Целое-3 Целое-4 Целое-4
Управляемая концовка Целое-3 Целое-5
Концовка страницы Концовка отчета, описанная без фразы НОМЕР СТРОКИ НА СЛЕДУЮЩЕЙ СТРАНИЦЕ Целое-5 плюс 1 Целое-5 плюс 1 Целое-1 Целое-1
Каждая группа отчета должна располагаться в определенной для
данного типа группы области, как указано в табл. 24.
Наличие в описании заголовка отчета фразы СЛЕДУЮЩАЯ ГРУП-
ПА НА СЛЕДУЮЩЕЙ СТРАНИЦЕ, а в описании концовки отчета
фразы НОМЕР СТРОКИ НА СЛЕДУЮЩЕЙ СТРАНИЦЕ вызывает
печать такой группы отчета на отдельной странице и влияет на гра-
ницы области, в которой может быть представлена такая группа.
Если во фразе РАЗМЕР СТРАНИЦЫ некоторые из вариантов ЗА-
ГОЛОВОК целое-2, ПЕРВЫЙ ФРАГМЕНТ целое-3, ПОСЛЕДНИЙ
ФРАГМЕНТ целое-4, КОНЦОВКА целое-5 опущены, для всех опу-
щенных спецификаций предполагается следующее:
а) если опущен вариант ЗАГОЛОВОК целое-2, целое-2 считается
равным 1;
б) если опущен вариант ПЕРВЫЙ ФРАГМЕНТ целое-3, целое-3
считается равным целому-2;
в) если опущен вариант ПОСЛЕДНИЙ ФРАГМЕНТ целое-4,
целое-4 считается равным целому-5;
г) если опущен вариант КОНЦОВКА целое-5, целое-5 считается
равным целому-4.
Если опущен и вариант ПОСЛЕДНИЙ ФРАГМЕНТ целое-4 и ва-
риант КОНЦОВКА целое-5, то целое-4 и целое-5 считаются равными
целому-1.
200
Если фраза РАЗМЕР СТРАНИЦЫ указана в стать# описания от-
чета, транслятором учреждаются связанные а этим отчетом счетчик
страниц и счетчик строк.
Фраза РАЗМЕР СТРАНИЦЫ может быть опущена, когда не тре-
буется никакой связи между группами отчета и физическим форматом
выводимой страницы. В этом случае для всех групп отчета (фразами
НОМЕР СТРОКИ и СЛЕДУЮЩАЯ ГРУППА) может быть указано
только расположение относительно предыдущей выданной группы
(относительное расположение).
Если для всех групп отчета указаны номера строк, на которых сле-
дует их располагать (абсолютное расположение), то нет необходимости
определять границы областей числами от целого-2 до целого-5. Если
для отчета, который имеет абсолютное распределение строк, указаны
какие-нибудь из этих чисел, то они игнорируются.
Если для какой-нибудь группы отчета указано относительное
расположение строк, оно должно согласовываться с границами, ука-
занными или подразумеваемыми во фразе РАЗМЕР СТРАНИЦЫ.
9.З.1.2. -Фраза С КОДОМ
Фраза С КОДОМ указывает на то, что в начало каждой выводимой
строки должен быть добавлен код, идентифицирующий данный отчет.
Идентификация имеет смысл, когда в файл записывается более одного
отчета.
Формат:
С КОДОМ мнемоническое-имя
Мнемоническое-имя должно быть определено в параграфе СПЕЦИ-
АЛЬНЫЕ-ИМЕНА раздела оборудования и связано с именем реа-
лизации, заданным нечисловым литералом из одной литеры. Иден-
тифицирующий код (нечисловой литерал) автоматически добавляется
в начало каждой выводимой строки перед управляющим символом
печати, как показано на рис. 30. Фраза не должна указываться,
если файл выводится непосредственно на печатающее устройство.
Если программисту нужно отпечатать конкретный отчет из файла,
содержащего несколько отчетов, ему следует читать файл, проверять
первый байт каждой записи на требуемый код и печатать запись, если
проверка удовлетворилась. Запись печатается с третьего байта.
Идентифициру- ющий код Управляющий символ печати Запись
Рис. 30. Формат записи отчета,
описанного с фразой С КОДОМ
201
9.3.1.3. Фраза УПРАВЛЕНИЕ
Фраза УПРАВЛЕНИЕ указывает имена и иерархию управляющих
элементов отчета, т. е. определяет порядок прерывания управления.
Формат:
г КОНЦУ
УПРАВЛЕНИЕ ПО < идентификатор-1 [идентификатор-2] ...
(КОНЦУ идентификатор-! [идентификатор-2] . . .
Идентификаторы представляют управляющие данные и должны
быть определены в секции файлов или в секции рабочей памяти.
Вариант ПО КОНЦУ обозначает наивысший уровень в иерархии
управления. Иерархия управляющих данных определяется порядком
перечисления идентификаторов. Идентификатор-] является старшим
управляющим данным, идентификатор-2 — промежуточным управ-
ляющим данным и т. д. Последний идентификатор является младшим
управляющим данным.
Управляющие данные проверяются каждый раз, когда генерирует-
ся группа отчета типа ФРАГМЕНТ. Проверка управляющих данных
производится в порядке их старшинства, определенном во фразе
УПРАВЛЕНИЕ.
Если при проверке обнаруживается, что значение управляющего
данного изменилось со времени предыдущей выдачи фрагмента, проис-
ходит прерывание управления. При прерывании управления для ка-
кого-то уровня подразумевается также прерывание управления для
каждого более низкого уровня. Прерывание управления ПО КОНЦУ
происходит только в начале и в конце вывода отчета.
При прерывании управления производятся действия, зависящие
от того, вывод какой группы отчета определил программист для
каждого управляющего данного: управляемого заголовка, управля-
емой концовки, обеих групп вместе или ни одной из них.
Управляемые концовки и заголовки выводятся перед печатью
фрагмента, для которого произошло прерывание управления. Их
печать производится в следующем порядке: управляемая концовка
самого низкого уровня, затем следующая управляемая концовка более
высокого уровня и т. д., включая управляемую концовку для уровня,
на котором произошло прерывание управления; далее управляемый
заголовок для этого уровня, затем следующий управляемый заго-
ловок более низкого уровня и т. д. до младшего' управляемого
заголовка включительно; после этого печатается фрагмент. Если во
время печати достигается конец страницы и заданы связанные с ним
группы отчета, то текущая страница заканчивается, на ней печатается
концовка страницы, и начинается новая страница с печати заголовка
страницы.
Фраза УПРАВЛЕНИЕ требуется, когда в отчете определены управ-
ляемые заголовки и управляемые концовки, отличные от управляемого
заголовка по концу или управляемой концовки по концу. Иденти-
фикаторы, указанные во фразе УПРАВЛЕНИЕ, являются единствен-
ными идентификаторами, которые могут появиться во фразе ТИП и ва-
рианте СБРОСИТЬ фразы СУММА в статье описания группы отчета.
202
9.3.2. Статья описания группы отчета
Статья описания группы отчета определяет тип группы, располо-
жение группы отчета на странице, формат входящих в ее состав дан-
ных и особенности управления, связанные с этой группой.
Каждая группа отчета описывается .иерархией статей, подобно
тому, как описывается запись данных.
Статья описания группы отчета, как и статья описания записи,
начинается с номера уровня 01, за которым, в отличие от статьи опи-
сания записи, может не следовать имя данного. Имя данного в статье
описания группы отчета должно присутствовать только тогда, когда
явно требуется обратиться к этой группе отчета в секции отчетов раз-
дела данных или в разделе процедур. Подобно записи группа отчета
состоит из элементарных данных, которые могут быть объединены в
групповые данные. Объединение элементарных данных в групповое
может использоваться, например, для указания одного номера строки
для всех элементарных данных, подчиненных этому групповому.
В отчете, представленном на рис, 23 — 28, элементарными данными
в группе отчета типа ФРАГМЕНТ (отмечена цифрой 3 или 4) являются,
например, «отдел», «количество покупок», «тип покупки», «стоимость».
Статьи описания элементарных и групповых данных в составе группы
отчета должны следовать за статьей описания группы отчета, имеющей
уровень 01. Для описания труппы отчета используются четыре фор-
мата.
Общий формат 1:
01 [имя-данного]
фраза ТИП
[фраза НОМЕР СТРОКИ]
[фраза СЛЕДУЮЩАЯ ГРУППА]
[фраза ДЛЯ ВЫДАЧЙ].
Общий формат 2:
номер-уровня [имя-даиного]
[фраза НОМЕР СТРОКИ]
|фраза ДЛЯ ВЫДАЧИ].
Общий формат 3:
вомер-уровня [имя-даиною]
[фраза НОМЕР СТРОКИ]
[фраза НОМЕР СТОЛБЦА]
[фраза ЗНАЧЕНИЕ]
[фраза ИСТОЧНИК]
[фраза СУММА]
[фраза ОПРЕДЕЛЯЕТ ГРУППУ]
фраза ШАБЛОН
[фраза ПРОБЕЛ КОГДА НУЛЬ]
[фраза СДВИНУТО ВПРАВО]
[фраза ДЛЯ ВЫДАЧИ].
203
Общий формат 4:
01 I имя-данного!
фраза ТИП
[фраза НОМЕР СТРОКИ]
[фраза СЛЕДУЮЩАЯ ГРУППА]
[фраза НОМЕР СТОЛБЦА]
[фраза ИСТОЧНИК]
[фраза ЗНАЧЕНИЕ]
[фраза СУММА]
[фраза ОЙРЁДЕЛЯЕТ ГРУППУ]
фраза ШАБЛОН
[фраза ПРОБЕЛ КОГДА НУЛЬ]
[фраза СДВИНУТО ВПРАЙб]
[фраза ДЛЯ ВЫДАЧИ].
Если имя-данного используется в статье описания, оно должно сле-
довать непосредственно за номером уровня. Остальные фразы могут
быть написаны в любом порядке.
Формат 1 используется для первой статьи в описании группы от-
чета: Описание группы отчета распространяется от этой статьи до
следующей статьи с уровнем 01 или до конца описания отчета.
Имя-данного в статьях формата 1 требуется только в двух случаях:
а) если в разделе процедур имеется оператор ГЕНЕРИРОВАТЬ,
ссылающийся на эту группу отчета, или для группы отчета, имеющей
тип заголовка или концовки, определено предложение ИСПОЛЬЗО-
ВАТЬ, как, например, в программе вывода отчета п. 9.6 (строки
040090 и 070090);
б) если в секции отчетов обращаются к группе отчета типа ФРАГ-
МЕНТ фразой СУММА с вариантом ДЛЯ.
Формат 2 используется для описания группового данного в составе
группы отчета. Номера уровней могут принимать значения от 02
до 48.
Формат 3 употребляется для описания элементарного данного в со-
ставе группы отчета. В описании элементарного данного используются
номера уровней от 02 до 49.
Формат 3 предназначен:
а) для описания элемента, который должен присутствовать в печат-
ной строке. В этом случае в статье описания должны присутствовать
фразы НОМЕР СТОЛБЦА, ШАБЛОН и одна из фраз ИСТОЧНИК,
СУММА или ЗНАЧЕНИЕ;
б) в описании группы отчета типа ФРАГМЕНТ для указания опе-
рандов, которые должны суммироваться при выводе этой группы
отчета;
в) в описании управляемой концовки для определения счетчика
СУММА.
Имя-данного в статьях формата 3 указывается только в случае,
когда требуется назвать счетчик суммы, который будет служить,
например, операндом фразы СУММА в этой же управляемой концовке
204
или управляемой концовке более высокого уровня, как например в
программе вывода отчета п. 9.6 (строки 060020 и 060150),
Формат 4 используется для описания группы отчета, которая со-
стоит только из одного элементарного данного. Если формат 4 при-
меняется вместо формата 1, эта статья должна быть единственной стать-
ей в описании группы.
Фразы ШАБЛОН, ПРОБЕЛ КОГДА НУЛЬ, СДВИНУТО ВПРА-
ВО и ДЛЯ ВЫДАЧИ применяются в статьях описания групп отчета
так же, как и в статьях описания записей данных.
9.З.2.1. Фраза ТИП
Фраза ТИП определяет тип группы отчета, которая описывается
этой статьей, и момент времени, в который должна быть представлена
ага группа отчета.
Формат:
'ЗАГОЛОВОК ОТЧЕТА
I3O
[ЗАГОЛОВОК СТРАНИЦЫ!
|ЗС J
(УПРАВЛЯЕМЫЙ ЗАГОЛОВОК)
идентификатор
КОНЦУ
ТИП
/ФРАГМЕНТ
ФР
УПРАВЛЯЕМАЯ КОНЦОВКА)
---------------------I ПО
УК I —
идентификатор
КОНЦУ
|КОНЦОВКА СТРАНИЦЫ
[КС
[КОНЦОВКА ОТЧЕТА!
|КО . I
30, ЗС, УЗ, ФР, УК, КС и КО являются соответственно сокра-
щениями для фраз ЗАГОЛОВОК ОТЧЕТА, ЗАГОЛОВОК СТРАНИ-
ЦЫ, УПРАВЛЯЕМЫЙ ЗАГОЛОВОК, ФРАГМЕНТ, УПРАВЛЯЕМАЯ
КОНЦОВКА, КОНЦОВКА СТРАНИЦЫ и КОНЦОВКА ОТЧЕТА.
. Каждая из групп отчета типа ЗАГОЛОВОК ОТЧЕТА, ЗАГОЛОВОК
СТРАНИЦЫ, УПРАВЛЯЕМЫЙ ЗАГОЛОВОК ПО КОНЦУ, УПРАВ-
ЛЯЕМАЯ КОНЦОВКА ПО КОНЦУ, КОНЦОВКА СТРАНИЦЫ
и КОНЦОВКА ОТЧЕТА может указываться в описании отчета не
более одного раза.
Группы отчета типа ЗАГОЛОВОК СТРАНИЦЫ и КОНЦОВКА
СТРАНИЦЫ могут быть указаны только тогда, когда в статье описа-
нпя соответствующего отчета используется фраза РАЗМЕР СТРА-
НИЦЫ.
Если во фразе ТИП указан идентификатор и (или) ПО КОНЦУ,
этот идентификатор и (или) зарезервированные слова ПО КОНЦУ
должны также указываться во фразе УПРАВЛЕНИЕ статьи описания
соответствующего отчета (на уровне 00). Для каждого из указанных
во фразе УПРАВЛЕНИЕ идентификатора или варианта ПО КОНЦУ
может быть определено не более одной группы отчета типа УПРАВ-
ЛЯЕМЫЙ ЗАГОЛОВОК и не более одной группы отчета типа УП-
РАВЛЯЕМАЯ КОНЦОВКА.
Вариант ФРАГМЕНТ определяет группу, которая создается не-
посредственно по оператору ГЕНЕРИРОВАТЬ в разделе процедур
исходной программы. Генерация групп отчета всех других типов вы-
полняется автоматически генератором отчетов в моменты времени,
которые определяются в зависимости от типа группы.
Если в отчете несколько различных групп типа ФРАГМЕНТ, их
имена должны быть уникальны. Эти имена используются в операторах
ГЕНЕРИРОВАТЬ для генерации соответствующей группы отчета.
Вариант ЗАГОЛОВОК ОТЧЕТА определяет группу отчета, ко-
торая автоматически создается только один раз в начале отчета во время
выполнения первого оператора ГЕНЕРИРОВАТЬ.
Вариант ЗАГОЛОВОК СТРАНИЦЫ определяет группу отчета,
которая автоматически создается генератором отчетов в качестве пер-
вой группы на каждой странице отчета, за исключением следующих
случаев:
группа отчета ЗАГОЛОВОК СТРАНИЦЫ не создается на странице,
которая должна содержать только заголовок отчета или только кон-
цовку отчета;
группа отчета ЗАГОЛОВОК СТРАНИЦЫ создается как вторая
группа на странице, если ей предшествует заголовок отчета, который
не представляется на отдельной странице.
Вариант УПРАВЛЯЕМЫЙ ЗАГОЛОВОК ПО идентификатор
определяет группу отчета, которая автоматически создается генера-
тором отчетов, когда происходит прерывание управления по иденти-
фикатору, и выдается в начале управляемой группы, определенной
для идентификатора. Вариант УПРАВЛЯЕМЫЙ ЗАГОЛОВОК ПО
КОНЦУ определяет группу отчета, которая создается один раз на
отчет при выполнении первого по времени оператора ГЕНЕРИРОВАТЬ
и выдается в качестве первой группы тела отчета.
Вариант УПРАВЛЯЕМАЯ КОНЦОВКА ПО идентификатор оп-
ределяет группу отчета, которая создается, когда происходит преры-
вание управления по идентификатору, и выдается в конце управляемой
группы, определенной для идентификатора. Вариант УПРАВЛЯЕМАЯ
КОНЦОВКА ПО КОНЦУ определяет группу отчета, которая создает-
ся один раз на отчет во время выполнения оператора ЗАКОНЧИТЬ
и выдается в качестве последней группы тела отчета.
Вариант КОНЦОВКА СТРАНИЦЫ определяет группу отчета,
которая создается в качестве последней группы на каждой странице,
за исключением следующих случаев:
206
группа отчета КОНЦОВКА СТРАНИЦЫ не создается на странице,
которая должна содержать только заголовок отчета или только кон-
цовку отчета;
группа отчета КОНЦОВКА СТРАНИЦЫ создается как предпо-
следняя группа на странице, если за ней следует концовка отчета,
которая не представляется на отдельной странице.
Вариант КОНЦОВКА ОТЧЕТА определяет группу отчета, ко-
торая создается только в конце отчета во время выполнения оператора
ЗАКОНЧИТЬ.
Перед заголовком отчета и после концовки отчета в отчете ничего
не может появиться.
Группы заголовков и концовок, если все онн определены для данно-
го отчета, появляются в нем в следующей последовательности:
заголовок отчета (только один раз),
заголовок страницы,
управляемый заголовок,
фрагмент,
фрагмент,
управляемая концовка,
управляемая группа
управляемый за1 оливок,
фрагмент,
управляемая группа
фрагмент,
управляемая концовка,. ,
концовка страницы,
концовка отчета (только один раз).
Группы отчета типа' УПРАВЛЯЕМЫЙ ЗАГОЛОВОК выдаются
в следующем порядке:
управляемый заголовок ПО КОНЦУ (только один раз),
старший управляемый заголовок,
младший управляемый заголовок.
Группы отчета типа УПРАВЛЯЕМАЯ КОНЦОВКА выдаются
в следующем порядке:
младшая управляемая концовка,
старшая управляемая концовка,
управляемая концовка ПО КОНЦУ (только один раз).
Группы отчета типа УПРАВЛЯЕМЫЙ ЗАГОЛОВОК выводятся
с текущими значениями управляющих данных, указанных во фразе
ИСТОЧНИК, перед печатью группы отчета ФРАГМЕНТ, связанной
с данной управляемой группой.
Группы отчета типа УПРАВЛЯЕМАЯ КОНЦОВКА выводятся
с предыдущими значениями управляющих данных, указанных во
фразе ИСТОЧНИК, сразу после печати группы отчета ФРАГМЕНТ,
связанной с данной управляемой группой.
207
Процедуры ИСПОЛЬЗОВАТЬ, указанные для группы отчета
УПРАВЛЯЕМАЯ КОНЦОВКА, оперируют с предыдущими значе-
ниями управляющих данных, указанных во фразе ИСТОЧНИК, и в
текущими значениями-прочих данных. Абсолютное или относительное
местоположение управляемых групп отчета устанавливается фразой
НОМЕР СТРОКИ, причем так, чтобы другие заголовки и концовки не
накладывались на них.
9.3.2.2. Фраза НОМЕР СТРОКИ
Фраза НОМЕР СТРОКИ указывает абсолютный или относитель-
ный номер строки в описываемой группе отчета по отношению к стра-
нице или предыдущей строке.
Формат:
НОМЕР СТРОКИ
целое-6 [НА СЛЕДУЮЩЕЙ СТРАНИЦЕ]
П ЛЮС целое-7
НА СЛЕДУЮЩЕЙ СТРАНИЦЕ
С каждой печатаемой строкой отчета должна быть связана фраза
НОМЕР СТРОКИ. Для первой строки группы отчета фраза НОМЕР
СТРОКИ может быть задана на уровне статьи описания группы от-
чета 01, перед статьей описания первого элементарного данного в
строке или в статье описания этого данного. Для строк отчета, отлич-
ных от первой, фраза НОМЕР СТРОКИ может быть задана в статье,
предшествующей описанию первого элементарного данного в строке,
или в статье описания этого данного. Для статей, следующих за ста-
тьей с фразой НОМЕР СТРОКИ и не содержащих такой фразы, не-
явно предполагается тот же номер строки, пока не встретится другая
фраза НОМЕР СТРОКИ или конец описания группы.
Целое-6 и целое-7 должны быть не более чем трехзначными целыми
положительными числами. Целое-6 и целое-7 должны быть такими, что-
бы любая печатаемая строка группы отчета находилась в пределах
области страницы, определенной для данного типа группы отчета фра-
зой РАЗМЕР СТРАНИЦЫ.
Вариант НОМЕР СТРОКИ целое-6 указывает абсолютный номер
строки, на которой должна печататься информация, на текущей
странице или на следующей, если указан вариант НА СЛЕДУЮЩЕЙ
СТРАНИЦЕ.
Вариант НОМЕР СТРОКИ НА СЛЕДУЮЩЕЙ СТРАНИЦЕ ука-
зывает, что группа должна печататься на следующей странице.
Фраза НОМЕР СТРОКИ с вариантом НА СЛЕДУЮЩЕЙ СТРА-
НИЦЕ может появляться только на уровне статьи описания группы
отчета 01 или в статье описания первой строки группы отчета. Строка
будет напечатана на следующей странице на строке с номером, зада-
ваемым целым-2 в варианте ЗАГОЛОВОК целое-2, если используется
фраза НОМЕР СТРОКИ НА СЛЕДУЮЩЕЙ СТРАНИЦЕ, или на
строке с номером, задаваемым целым-6, если используется фраза
НОМЕР СТРОКИ целое-6 НА СЛЕДУЮЩЕЙ СТРАНИЦЕ.
208
Вариант НОМЕР СТРОКИ ПЛЮС целое-7 указывает относитель-
ный номер строки, т. е. номер относительно предыдущей строки, на-
печатанной или пропущенной.
Все фразы НОМЕР СТРОКИ, задающие абсолютный номер, в
статье описания группы отчета должны предшествовать фразам НО-
МЕР СТРОКИ, задающим относительный номер. В описании неко-
торой группы отчета статья, содержащая фразу НОМЕР СТРОКИ,
не должна содержать подчиненную статью с такой фразой. Если в ста-
тье описания некоторого отчета опущена фраза РАЗМЕР СТРА-
НИЦЫ, то в статьях описания групп этого отчета могут использо-
ваться только фразы НОМЕР СТРОКИ, задающие относительный
номер.
Допустимые варианты фразы НОМЕР СТРОКИ для первой строки
групп отчета разных типов приведены в табл. 25.
Таблица 25
Тип группы , Вариант фразы НОМЕР СТРОКИ
целое-6 ПЛЮС целое-7 НА СЛЕДУ- ЮЩЕЙ СТРА- НИЦЕ
Заголовок отчета Да Да Нет
Заголовок страницы Да Да Нет
Группы тела отчета Да Да Да
Концовка страницы Да Нет Нет
Концовка отчета Да Да • Да
Для управления вертикальным позиционированием строк отчета
генератор отчётов использует счетчик строк. Если в статье группы
отчета фразой НОМЕР СТРОКИ указан абсолютный номер (вариант
целое-6), целое-6 засылается в счетчик строк и определяет номер стро-
ки для печати данных этой и следующих статей группы отчета до тех
пор, пока не будет указано новое значение.
Если в статье группы отчета фразой НОМЕР СТРОКИ указан от-
носительный номер (вариант ПЛЮС целое-7), в общем случае целое-7
добавляется к счетчику строк, который затем используется для печа-
ти данных этой и следующих статей группы отчета до тех пор, пока
не будет указано новое значение счетчика строк. При относительном
задании номера первой строки группы отчета размещение группы за-
висит от ее типа и формата страницы, определенного фразой РАЗМЕР
СТРАНИЦЫ (ЗАГОЛОВОК целое-2, ПЕРВЫЙ ФРАГМЕНТ целое-3,
КОНЦОВКА целое-5). Для этого случая правила размещения пер-
вой строки группы отчета для разных типов групп сведены в табл. 26.
Если в статье описания группы отчета фраза СЛЕДУЮЩАЯ ГРУП-
ПА не использовалась, после печати группы отчета счетчик строк
остается установленным на номер последней напечатанной строки.
О влиянии фразы СЛЕДУЮЩАЯ ГРУППА на установку счетчика
строк см, п, 9,3,2.3.
у
209
Таблица 26
Тип группы Номер строки на странице
Заголовок отчета Заголовок страницы: на одной странице с заголовком отчета на разных страницах с заголов- ком отчета Группы тела отчета Концовка отчета: не на отдельной странице на отдельной странице Целое-2 — 1 + целое-7 СМЕТЧИК-СТРОК + целое-7 Целое-2 — 1 + целое-7 СЧЕТЧИК-СТРОК, если СЧЕТЧИК-СТРОК^целое-3 и на этой странице , еше не печатались группы тела отчета; СЧЕТЧИК-СТРОК + целое-7, если СЧЕТЧИК-СТРО К целое-3 в на этой странице уже печатались группы тела от- чета; целое-3, если СЧЕТЧИК-СТРОК<иелое-3 СЧЕТЧИК-СТРОК + целое-7 Целое-5 + целое-7
Если в описании группы отчета отсутствует фраза НОМЕР СТРО-
КИ, такая группа называется фиктивной. Фиктивная группа
отчета не печатается, однако для нее выполняются все другие автома-
тические функции генератора отчетов, например суммирование. При
обработке фиктивной группы отчета содержимое счетчика строк не
меняется.
9.3.2.3. Фраза СЛЕДУЮЩАЯ ГРУППА
Фраза СЛЕДУЮЩАЯ ГРУППА указывает информацию, необхо-
димую для вертикального позиционирования страницы после печати
последней строки группы отчета.
Формат:
СЛЕДУЮЩАЯ ГРУППА
целое-8
ПЛЮС целое-9
НА СЛЕДУЮЩЕЙ СТРАНИЦЕ
Фраза СЛЕДУЮЩАЯ ГРУППА может появиться только на уров-
не статьи описания группы отчета. Статья описания группы отчета
не должна содержать фразу СЛЕДУЮЩАЯ ГРУППА, если описание
этой группы отчета не включает ни одной фразы НОМЕР СТРОКИ.
Целое-8 и целое-9 должны быть не более чем трехзначными целыми
положительными числами.
Вариант целое-8 указывает абсолютный номер строки, а вариант
ПЛЮС целое-9 — относительный номер строки.
Если в статье описания отчета фраза РАЗМЕР СТРАНИЦЫ не
указана, то в статьях описания групп этого отчета фраза СЛЕДУЮ-
210
ЩАЯ ГРУППА может задавать только их относительное располо-
жение,
В статьях описания заголовка страницы, концовки страницы и
концовки отчета фраза СЛЕДУЮЩАЯ ГРУППА не может быть ука-
зана.
В описании заголовка отчета эта фраза воздействует на разме-
щение заголовка страницы, а в описании групп тела отчета — на раз-
мещение следующей группы тела-отчета.
Если фраза СЛЕДУЮЩАЯ ГРУППА указана в описании управ-
ляемой концовки, функции этой фразы выполняются только тогда,
когда прерывание происходит на уровне данной управляемой кон-
цовки.
Правила и действие фразы СЛЕДУЮЩАЯ ГРУППА для заголовка
отчета и групп тела отчета приводятся ниже.
Правила для заголовка отчета:
а) если заголовок отчета должен быть представлен на отдельной
странице, в его описании должна использоваться фраза СЛЕДУЮЩАЯ
ГРУППА с вариантом НА СЛЕДУЮЩЕЙ СТРАНИЦЕ;
б) значение счетчика строк устанавливается на значение целого-8,
задающего абсолютный номер строки, или сумму текущего значения
счетчика и целого-9, задающего относительный номер строки для сле-
дующей группы. Целые должны быть заданы так-, чтобы результирую-
щее значение было меньше целого-3 в варианте ПЕРВЫЙ ФРАГМЕНТ
фразы РАЗМЕР СТРАНИЦЫ.
Правила для групп тела отчета:
а) вариант НА СЛЕДУЮЩЕЙ СТРАНИЦЕ в описании групп тела
отчета указывает, что на этой странице отчета никаких групп тела
отчета больше не будет;
б) целое-8, задающее абсолютный номер строки для следующей
группы тела отчета, должно попадать в диапазон от целого-3 (ПЕР-
ВЫЙ ФРАГМЕНТ) до целого-5 (КОНЦОВКА);
в) значение счетчика строк устанавливается следующим образом:
если фраза СЛЕДУЮЩАЯ ГРУППА задает абсолютный номер
строки, то счетчик строк устанавливается на целое-8, если текущее
значение счётчика строк меньше целого-8, и на целое-5 (КОНЦОВКА),
если текущее значение счетчика строк больше или равно целому-8;
если фраза СЛЕДУЮЩАЯ ГРУППА задает относительный номер
строки, то счетчик строк устанавливается на сумму текущего значения
счетчика и целого-9, если эта сумма меньше целого-5, -или на целое-5,
если эта сумма больше или равна целому-5.
9.3.2.4. Фраза НОМЕР СТОЛБЦА
Фраза НОМЕР СТОЛБЦА указывает абсолютный номер столбца,
начиная с которого должны печататься литеры элементарного данного,
и идентифицирует данное как печатаемое.
Формат:
НОМЕР СТОЛБЦА целое
211
Целое должно быть положительным целым числом. Оно указывает
позицию крайней левой литеры выводимого элементарного данного.
Фраза НОМЕР СТОЛБЦА должна быть задана для каждого печа-
таемого элементарного данного группы отчета, содержащей фразу
НОМЕР СТРОКИ или подчиняющейся такой статье, даже если груп-
па состоит из одного элементарного данного, описанного на уровне 01.
Если для элементарного данного эта фраза не указана, оно не будет
представлено при выводе группы отчета.
Для конкретной группы отчета и конкретной спецификации но-
мера строки номера столбцов могут быть заданы в произвольном по-
рядке, не обязательно возрастающем.
Транслятор не проверяет совокупность номеров столбцов для дан-
ной строки на непротиворечивость. Если номера столбцов указаны
неправильно, может произойти наложение элементарных данных
при печати,
9.3.2.5. Фраза ИСТОЧНИК
Фраза ИСТОЧНИК определяет идентификатор данного, значение
которого должно быть представлено при выдаче группы, содержащей
этот элемент отчета.
Формат:
ИСТОЧНИК идентификатор
Идентификатор может быть определен в любой секции раздела
данных. Из секции отчетов в качестве идентификатора могут исполь-
зоваться только следующие элементы: специальные регистры СЧЕТ-
ЧИК-СТРОК и СЧЕТЧИК-СТРАНИЦ; счетчики суммы того же от-
чета, в котором появляется фраза ИСТОЧНИК.
Перед представлением группы отчета, содержащей в описании фр а
зу ИСТОЧНИК, генератор отчетов пересылает значение идентифика-
тора в поле печатаемого данного. В выводимой строке значение иден-
тификатора будет представлено в соответствии с фразами ШАБЛОН
и НОМЕР СТОЛБЦА статьи описания элемента отчета.
Фразы ИСТОЧНИК в описании групп отчета типа УПРАВЛЯЕМАЯ
КОНЦОВКА, ЗАГОЛОВОК СТРАНИЦЫ, КОНЦОВКА СТРАНИЦЫ
и КОНЦОВКА ОТЧЕТА не должны ссылаться: на группу данных,
содержащую управляющее данное; на данные, подчиненные управля-
ющему данному; на данные, переименовывающие или переопределяю-
щие управляющие данные.
9.3.2.6. Фраза ЗНАЧЕНИЕ
Фраза ЗНАЧЕНИЕ указывает значение, которое должно принимать
элементарное данное всякий раз, когда выводится его группа отчета.
Формат:
(ЗНАЧЕНИЕ )
। ЗНАЧ । литерал
212
ЗНАЧ является сокращением слова ЗНАЧЕНИЕ.
Если статья описания элементарного данного наряду с фразой
ЗНАЧЕНИЕ содержит фразу ОПРЕДЕЛЯЕТ ГРУППУ, данное вы-
дается в соответствии с правилами для фразы ОПРЕДЕЛЯЕТ
ГРУППУ.
Литерал должен задаваться в соответствии с фразой ШАБЛОН
для этого данного.
9.3.2.7. Фраза СУММА
Фраза СУММА учреждает счетчик суммы и указывает идентифи-
каторы данных, которые должны суммироваться.
Формат:
СУММА идентификатор-1 [идентификатор-2] ...
ДЛЯ идеитификатор-3]
СБРОСИТЬ ПО j идентификатор-4
Фраза СУММА может использоваться только в описании групп
отчета типа УПРАВЛЯЕМАЯ КОНЦОВКА. Если к счетчику суммы
нужно обратиться в разделе процедур или секции отчетов раздела
данных, в статье, содержащей фразу СУММА, должно быть указано
имя данного. Это имя относится к счетчику суммы, а не к печатаемому
данному, которое может определяться этой статьей. Независимо от
того, указано в статье описания элементарного данного, содержа-
щей фразу СУММА, имя счетчика или нет, фраза ШАБЛОН должна
быть указана для каждого счетчика суммы. В строку литер шаблона
для счетчика суммы могут быть включены литеры редактирования чис-
ловых данных. Редактирование счетчика происходит только при вы-
воде его значения. Во всех остальных операциях счетчик рассмат-
ривается как числовое элементарное данное, размер которого опре-
деляется количеством цифровых позиций в строке литер шаблона.
Идентификатор-1 и идентификатор-2 должны представлять эле-
ментарные числовые данные и могут быть определены в любой секции
раздела данных. Если идентификаторы определены в секции отчетов,
они должны быть именами счетчиков суммы. Счетчик суммы, явля-
ющийся операндом фразы СУММА, может быть определен в той же груп-
пе отчета УПРАВЛЯЕМАЯ КОНЦОВКА, которая содержит данную
фразу СУММА, или в группе отчета УПРАВЛЯЕМАЯ КОНЦОВКА’,
которая находится на более низком уровне в управляющей иерар-
хии данного отчета.
В момент начала генерации отчета все счетчики сумм устанавли-
ваются на нуль. Момент наращивания счетчиков сумм зависит от типа
операндов, указанных во фразе СУММА, следующим образом:
а) операнд фразы СУММА, который является элементарным число-
вым данным, описанным в секции файлов, секции рабочей памяти
или секции связи, прибавляется к счетчику при генерации группы
отчета ФРАГМЕНТ, для которой этот операнд указан во фразе ИСТОЧ-
НИК.
213
Пример.
Пусть для некоторого отчета описаны группы отчета:
. 01 фрагмент-1 ТИП ФРАГМЕНТ . . .
02 ИСТОЧНИК al . . .
01 фрагмент-2 ТИП ФРАГМЕНТ . . .
02 ИСТОЧНИК в1 . . .
02 ИСТОЧНИК cl . . .
01 фрагмент-3 ТИП ФРАГМЕНТ . . .
02 ИСТОЧНИК в Г . . .
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА . . .
02 счетчнк-1 СУММА al, в1, cl ...
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА . . .
02 счетчик-2 СУММА в1 . . .
Тогда для каждой группы отчета типа ФРАГМЕНТ транслятор
построит программу суммирования, включающую операторы добав-
ления содержимого источников к соответствующим счетчикам суммы:
для группы «фрагмент-1» — СЛОЖИТЬ al С счетчик-1;
для группы «фрагмент-2» — СЛОЖИТЬ в1 G счетчик-1; СЛОЖИТЬ
cl С счетчик-1; СЛОЖИТЬ в1 С счетчик-2;
для группы «фрагмент-3» — СЛОЖИТЬ в! С счетчик-1; СЛОЖИТЬ
в1 С счетчик-2.
Если операнд появляется более чем в одной фразе ИСТОЧНИК
группы отчета ФРАГМЕНТ, он прибавляется к счетчику только один
раз. Операнды во фразах СУММА должны появляться с такими же
уточнителями и индексами, если они требуются, как й во фразах
ИСТОЧНИК;
б) операнд, являющийся счетчиком суммы и определенный в группе
отчета УПРАВЛЯЕМАЯ КОНЦОВКА более низкого уровня в уп-
равляющей иерархии отчета, суммируется перед выводом группы от-
чета УПРАВЛЯЕМАЯ КОНЦОВКА, в которой ои определен.
Время выполнения программы может быть сокращено выбором
правильного метода суммирования. Пусть, например, требуется про-
суммировать расходы за день, неделю, месяц-и год. Сравним два при-
мера, содержащих части программы из секции отчетов.
Пример 1.
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО год.
02 СУММА расходы ...
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО месяц.
02 СУММА расходы . . .
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО неделя.
02 СУММА расходы . . .
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО день.
02 СУММА расходы . . .
Пример 2.
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО день.
02 сумма-за-день СУММА расходы ...
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО неделя.
02 сумма-за-неделю СУММА сумма-за-день . . .
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО месяц.
02 сумма-за-месяц СУММА сумма-за-неделю . . .
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО год.
02 СУММА сумма-за-месяц . .
214
Программа примера 2 выполняется быстрее, чем программа при-
мера 1, в котором для каждого дня производятся четыре сложения.
В примере 2 выполняется одно сложение для каждого дня и по одному
сложению при переходе на другую неделю, месяц и год;
в) операнд, являющийся счетчиком суммы и определенный в той
же группе отчета УПРАВЛЯЕМАЯ КОНЦОВКА, что и эта фраза
СУММА, суммируется перед выводом этой группы УПРАВЛЯЕМАЯ
КОНЦОВКА. Такие операнды прибавляются к соответствующим счет-
чикам суммы в порядке, в котором они появляются в статье описания
группы УПРАВЛЯЕМАЯ КОНЦОВКА, т. е. слева направо — в
статье описания элементарного данного группы и вниз — по статьям
описания данных.
Вариант ДЛЯ идентификатор-3 во фразе СУММА используется
для выборочного суммирования конкретного данного, которое назва-
но как элемент ИСТОЧНИК в двух или более группах отчета типа
ФРАГМЕНТ. Идентификатор-3 должен быть именем группы отчета
типа ФРАГМЕНТ. Идентификатор-1 и идентификатор-2 должны быть
данными ИСТОЧНИК в статье описания этой группы. Суммирование
происходит только при генерации фрагмента, определенного иденти-
фикатором-3.
Пример.
Для фрагментов, описанных в примере пункта а), изменим первую
у из управляемых концовок:
01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА . . .
02 счетчик-1 СУММА al, в1, cl ДЛЯ фрагмент-2 ...
Для видоизмененного примера транслятором будут строиться толь-
ко следующие программы суммирования:
для группы «фрагмент-2» — СЛОЖИТЬ al С счетчик-1; СЛОЖИТЬ
в1 С счетчик-1; СЛОЖИТЬ cl С счетчик-1; СЛОЖИТЬ в 1 С счетчик-2;
для группы «фрагмент-3» — СЛОЖИТЬ в1 С счетчик-2.
Вариант СБРОСИТЬ позволяет определить отличный от обычного
момент установки счетчика суммы на нуль при прерывании управ-
ления.
Обычно счетчики, связанные с группой отчета УПРАВЛЯЕМАЯ
КОНЦОВКА, автоматически устанавливаются на нуль после печати
этой группы отчета (при прерывании управления по идентификатору,
связанному с этой группой УПРАВЛЯЕМАЯ КОНЦОВКА).
Вариант СБРОСИТЬ позволяет установить значение счетчика
на нуль при прерывании управления по управляющему элементу бо-
лее высокого уровня. Идентификатор-4 во фразе СБРОСИТЬ должен
быть одним из идентификаторов, указанных во фразе УПРАВЛЕНИЕ
в статье описания отчета (ОО). Он должен представлять управляющее
данное более высокого уровня, чем управляющее данное, связанное
с группой УПРАВЛЯЕМАЯ КОНЦОВКА, содержащей в описании
фразу СУММА с вариантом СБРОСИТЬ.
Вариант СБРОСИТЬ может использоваться для получения нара-
стающих сумм. Например, в программе вывода отчета, представлен-
215
ного на рис. 23 — 28, нарастающая за день сумма стоимости в графе
ОБЩ-СТОИМ получается указанием варианта СБРОСИТЬ ПО КОН-
ЦУ фразы СУММА в управляемой концовке по дню.
9.3.2.8. Фраза ОПРЕДЕЛЯЕТ ГРУППУ
Фраза ОПРЕДЕЛЯЕТ ГРУППУ указывает, что описываемое эле-
ментарное данное должно быть представлено только при первом появ-
лении содержащей его группы после прерывания управления или
перехода на другую страницу,
Формат:
ОПРЕДЕЛЯЕТ ГРУППУ
Фраза ОПРЕДЕЛЯЕТ ГРУППУ может быть указана только для
элементарного данного в группе отчета ФРАГМЕНТ.
В случае когда печатаемое элементарное данное не должно выво-
диться, в печатаемых строках на его месте проставляются пробелы.
Так, в примере программы вывода отчета, представленного на
рис. 23 — 28, фраза ОПРЕДЕЛЯЕТ ГРУППУ, указанная для эле-
ментов фрагмента отчета, источником которьГх является название
месяца и день (строки 050060 — 050090), подавляет печать значений
этих элементов во всех фрагментах, кроме первого после прерывания
управления.
Если в статье описания отчета фраза РАЗМЕР СТРАНИЦЫ или
УПРАВЛЕНИЕ не указана, данное, определенное с фразой ОПРЕ-
ДЕЛЯЕТ ГРУППУ, печатается только при первом появлении содер-
жащей его группы типа ФРАГМЕНТ после выполнения оператора НА-
ЧАТЬ,
9.4. ОПЕРАТОРЫ ВЫВОДА ОТЧЕТА
9.4.1. Оператор НАЧАТЬ
Оператор НАЧАТЬ инициирует выдачу отчета и выполняет для
отчета функции, аналогичные функциям оператора ОТКРЫТЬ для
файла.
Формат:
НАЧАТЬ имя-отчета-1 [имя-отчета-2] . . .
Каждое имя отчета должно быть определено статьей описания от-
чета (ОО) в секции отчетов раздела данных.
Оператор НАЧАТЬ для каждого указанного отчета выполняет
следующие подготовительные действия:
а) устанавливает на нуль все счетчики сумм;
б) устанавливает на нуль регистр СЧЕТЧИК-СТРОК;
в) устанавливает на единицу регистр СЧЕТЧИК-СТРАНИЦ.
21b
Оператор НАЧАТЬ не открывает файл, о которым евязан отчет,
поэтому программист должен предусмотреть оператор ОТКРЫТЬ
для открытия файла.
Повторно оператор НАЧАТЬ для данного отчета может быть вы-
полнен только после выполнения оператора ЗАКОНЧИТЬ для этого
отчета,
9.4.2. Оператор ГЕНЕРИРОВАТЬ
Оператор ГЕНЕРИРОВАТЬ побуждает генератор отчетов созда-
вать отчет в соответствии с описание^ отчета в секции отчеюв раздела
данных.
Формат:
ГЕНЕРИРОВАТЬ I имя-данного у
------------- I имя-отчета J
Имя-данного — это имя группы отчета типа ФРАГМЕНТ. Оно
может уточняться именем отчета. „
Если указано имя-данного (имя группы отчета типа ФРАГМЕНТ),
оператор ГЕНЕРИРОВАТЬ выполняет ряд автоматических операций,
описанных ниже, и выводит группу отчета типа ФРАГМЕНТ на носи-
тель данных. Это называется генерацией фрагмента.
Если указано имя-отчета, оператор ГЕНЕРИРОВАТЬ выполняет
такие же автоматические операции, что и при генерации фрагмента,
но не выводит никаких групп отчета типа ФРАГМЕНТ. Это называет-
ся генерацией итогов. При генерации итогов счетчики сумм увеличи-
ваются таким же образом, как и при генерации фрагмента. Если в от-
чете описано несколько групп типа ФРАГМЕНТ, счетчики увеличи-
ваются таким образом,.как если бы операторы ГЕНЕРИРОВАТЬ были
последовательно определены для всех этих групп. Такое последова-
тельное суммирование выполняется в порядке появления описаний
групп отчета типа ФРАГМЕНТ. Однако для каждого оператора ГЕ-
НЕРИРОВАТЬ имя-отчета осуществляется только одна проверка на
прерывание управления. Эта проверка выполняется генератором от-
четов перед генерацией итогов. После инициализации отчета и перед
его завершением могут быть выполнены и генерация фрагмента, и ге-
нерация итогов.
При выполнении первого по времени оператора ГЕНЕРИРОВАТЬ
имя-данного для данного отчета генератор отчетов производит сле-
дующие автоматические действия, если они предусмотрены описанием
отчета:
а) сохраняет значения управляющих данных, которые будут исполь-
зоваться для обнаружения прерывания управления при выполнении
хронологически второго и следующих операторов ГЕНЕРИРОВАТЬ
б) генерирует по порядку следующие группы отчета: заголовок
отчета, заголовок страницы, группы управляемых заголовков от стар-
шего до младшего;
в) выполняет генерацию фрагмента.
21 /
При выполнении второго и следующих операторов ГЕНЕРИРО-
ВАТЬ имя-данного генератор отчетов осуществляет автоматически
следующие действия, если они предусмотрены описанием отчета:
а) проверяет, изменились ли значения управляющих данных,
т. е. имеет ли место прерывание управления. Если прерывание управ-
ления имеет место, генератор отчетов:
обеспечивает использование предыдущих значений управляющих
данных в декларативных процедурах и в качестве значений данных
ИСТОЧНИК для управляемых концовок;
сохраняет новый набор значений управляющих данйых для опре-
деления прерывания управления при выполнении следующих опера-
торов ГЕНЕРИРОВАТЬ;
генерирует управляемые концовки в порядке от младшей к стар-
шей, кончая управляемой концовкой для того уровня, на котором
произошло прерывание управления;
генерирует управляемые заголовки в порядке от старшего уровня,
на котором произошло прерывание управления, к младшему;
б) выполняет генерацию фрагмента.
При генерации фрагмента генератор отчетов добавляет к счетчи-
кам суммы значения всех идентификаторов, указанных во фразах
СУММА и являющихся данными ИСТОЧНИК.
При генерации управляемой концовки генератором отчетов вы-
полняются следующие действия:
а) счетчики суммы, определенные в этой группе отчета и являю-
щиеся операндами фразы СУММА в этой же группе отчета, добавля-
ются к их счетчикам суммы;
б) счетчики суммы, определенные в этой группе отчета и являю-
щиеся операндами фразы СУММА в управляемой концовке более
высокого уровня иерархии, добавляются к счетчикам суммы этого
более высокого уровня;
в) печатные строки управляемой концовки представляются в соот-
ветствии с определенными для управляемой концовки правилами;
г) счетчики суммы, определенные в этой группе отчета, устанав-
ливаются на нуль, если вариантом СБРОСИТЬ фразы СУММА не оп-
ределяется другой момент установки счетчиков на нуль.
При обработке групп тела отчета при необходимости осуществ-
ляется переход к следующей странице и автоматически обрабатывают-
ся группы отчета типа ЗАГОЛОВОК СТРАНИЦЫ и КОНЦОВКА
СТРАНИЦЫ, если они определены.
Если для каких-нибудь групп отчета определены декларативные
процедуры, они выполняются перед генерацией соответствующей
группы отчета.
Операторы ГЕНЕРИРОВАТЬ для отчета могут выполняться
только после выполнения оператора НАЧАТЬ для этого отчета и
до выполнения оператора ЗАКОНЧИТЬ.
218
9.4.3. Оператор ЗАКОНЧИТЬ
Оператор ЗАКОНЧИТЬ завершает обработку отчета и выполняет
для отчета функции, аналогичные функциям оператора ЗАКРЫТЬ
для файла.
Формат:
ЗАКОНЧИТЬ имя-отчета-1 [имя-отчета-2] , . .
Каждое имя отчета, заданное в операторе ЗАКОНЧИТЬ, должно
быть определено статьей описания отчета (00) в секции отчетов раз-
дела данных.
Оператор ЗАКОНЧИТЬ выводит все группы отчета типа УПРАВ-
ЛЯЕМАЯ КОНЦОВКА, связанные с данным отчетом, как в случае,
когда прерывание управления происходит на самом высоком уровне,
а также группу отчета КОНЦОВКА ОТЧЕТА, если она определена
в описании отчета. Группы отчета ЗАГОЛОВОК СТРАНИЦЫ и (или)
КОНЦОВКА СТРАНИЦЫ, если они определены в описании отчета,
выводятся в соответствующем порядке при необходимости перехода
к новой странице.
Повторно оператор ЗАКОНЧИТЬ для данного отчета может быть
выполнен только после выполнения второго оператора НАЧАТЬ для
этого отчета.
Оператор ЗАКОНЧИТЬ не закрывает файл, о которым связан
отчет, поэтому программист должен предусмотреть оператор ЗАКРЫТЬ
для этого файла.
Если в рабочее время оператор ГЕНЕРИРОВАТЬ для отчета не
выполнялся, то по оператору ЗАКОНЧИТЬ никакие группы отчета
выводиться не будут и никакой обработки счетчиков СУММА тоже
не будет.
Фразы ИСТОЧНИК, используемые в группах отчета УПРАВЛЯВ- -
МАЯ КОНЦОВКА ПО КОНЦУ нли КОНЦОВКА ОТЧЕТА, отно-
сятся к значениям данных во время выполнения оператора ЗАКОН-
ЧИТЬ.
Г.4.4. Оператор ИСПОЛЬЗОВАТЬ
Оператор ИСПОЛЬЗОВАТЬ определяет процедуру, которая долж-
на.выполняться перед выводом группы отчета.
Формат:
ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ идентификатор
Оператор ИСПОЛЬЗОВАТЬ должен следовать непосредственно за
заголовком секции в декларативной части раздела процедур и.закан-
чиваться точкой. Остальная часть секции состоит из параграфов,
определяющих необходимые процедуры, н оформляется по правилам,
изложенным в п. 5.5.9.
Идентификатор представляет группу отчета любого типа, кроме
ФРАГМЕНТ, описанную в секции отчетов раздела данных. Один и
тот же идентификатор не должен появиться более чем в одном пред-
ложении ИСПОЛЬЗОВАТЬ.
21Э
Ни один из операторов .генератора отчетов: ГЕНЕРИРОВАТЬ,
НАЧАТЬ или ЗАКОНЧИТЬ, не может быть использован в параграфах,
следующих за предложением ИСПОЛЬЗОВАТЬ в декларативной
секции.
Процедуры, определенные оператором ИСПОЛЬЗОВАТЬ, выпол-
няются генератором отчетов непосредственно перед выводом назван-
ной группы отчета независимо от связанного с этой группой отчета
прерывания управления или перехода на следующую страницу,
9.4.5. Оператор ПОДАВИТЬ ПЕЧАТЬ
Оператор ПОДАВИТЬ ПЕЧАТЬ запрещает печать (представление)
группы отчета.
Формат:
ПОДАВИТЬ ПЕЧАТЬ
Оператор ПОДАВИТЬ ПЕЧАТЬ может использоваться только
в декларативной секции, связанной с оператором ИСПОЛЬЗОВАТЬ
ДО ВЫДАЧИ. Он исключает печать группы отчета, для которой оп-
ределена декларативная секция. Этот оператор должен выполняться
каждый раз, когда требуется исключить печать группы отчета.
Использование данного оператора приводит к следующим резуль-
татам:
а) печать группы отчета не производится;
б) СЧЕТЧИК-СТРОК не изменяется:
в) функция фразы СЛЕДУЮЩАЯ ГРУППА, если она присутствует
в описании группы отчета, аннулируется.
9.5. СПЕЦИАЛЬНЫЕ РЕГИСТРЫ СЧЕТЧИК-СТРАНИЦ
И СЧЕТЧИК-СТРОК
Специальные регистры СЧЕТЧИК-СТРАНИЦ и СЧЕТЧИК-
СТРОК — это числовые счетчики, автоматически создаваемые гене-
ратором отчетов при наличии фразы РАЗМЕР СТРАНИЦЫ в статье
описания отчета.
Каждому отчету, содержащему в описании такую фразу, назна-
чается один счетчик страниц и один счетчик строк. Если в программе
несколько отчетов, 'счетчики должны уточняться именем отчета при
обращении к ним.
СЧЕТЧИК-СТРАНИЦ — это имя числового счетчика, в котором
генератором отчетов генерируется текущее значение номера страницы.
Счетчик может использоваться в качестве данного ИСТОЧНИК,
чтобы напечатать текущий номер страницы. Значение счетчика пе-
чатается в соответствии с фразой ШАБЛОН, описывающей элементар-
ное-данное, у которого в качестве данного ИСТОЧНИК цспользуется
СЧЕТЧИК-СТРАНИЦ. Если в одном и том же отчете счетчик страниц
используется в качестве данного ИСТОЧНИК несколько раз, то фразы
ШАБЛОН данных, описанных с фразой ИСТОЧНИК, должны оп-
ределять одинаковое количество цифровых позиций.
220
После выполнения оператора НАЧАТЬ значение счетчика страниц
равно единице. Если требуется начальное значение, отличное от едини-
ли, программист должен поместить в СЧЕТЧИК-СТРАНИЦ требуемое
значение в декларативной процедуре для первой печатаемой группы
этчета после выполнения оператора НАЧАТЬ. Всякий раз, когда
генератор отчетов опознает конец страницы, счетчик страниц авто-
матически увеличивается на единицу после вывода группы отчета
КОНЦОВКА СТРАНИЦЫ, но перед выводом группы отчета ЗАГО-
ЛОВОК СТРАНИЦЫ.
СЧЕТЧИК-СТРОК — это имя числового счетчика, в котором ге-
нератором отчетов генерируется текущее- значение номера строки
на странице. Этот счетчик используется генератором отчетов для
определении момента вывода группы отчета ЗАГОЛОВОК СТРАНИ-
ЦЫ и (или) КОНЦОВКА СТРАНИЦЫ. Если этот счетчик исполь-
зуется в качестве данного ИСТОЧНИК, печать его значения произ-
водится в соответствии с фразой ШАБЛОН, описывающей элементар-
ное данное, у которого в качестве данного ИСТОЧНИК используется
ЗЧЕТЧИК-СТРОК. Счетчик строк автоматически проверяется и уве-
личивается генератором отчетов на основании значений параметров,
определяющих формат страницы во фразе РАЗМЕР СТРАНИЦЫ, и
значений, указанных во фразах НОМЕР СТРОКИ и СЛЕДУЮЩАЯ
ГРУППА. После выполнения оператора НАЧАТЬ значение счетчика
строк равно нулю. Изменение значения счетчика строк операторами
раздела процедур может привести к непредвиденному управлению
форматом страницы.
9.6. ПРИМЕР ПРОГРАММЫ
Ниже приводится пример исходной программы для вывода отчета,
представленного на рис. 23 — 28.
510010 РАЗДЕЛ ИДЕНТИФИКАЦИИ.
310020 ПРОГРАММА, otchet.
510030 АВТОР. Иванов.
510040 РАЗДЕЛ ОБОРУДОВАНИЯ.
510050 СЕКЦИЯ КОНФИГУРАЦИИ.
510060 ИСХОДНАЯ-МАШИНА. ЕС-1022.
510070 РАБОЧАЯ-МАШИНА. ЕС-1022.
510080 СЕКЦИЯ ВВОДА-ВЫВОДА.
510090 УПРАВЛЕНИЕ-ФАЙЛАМИ.
510100 ДЛЯ вход-файл НАЗНАЧИТЬ SYS006-UR -6012-S*.
510110 ДЛЯ файл-отчет НАЗНАЧИТЬ SYS005-UR-7030-S**.
310120 РАЗДЕЛ ДАННЫХ.
510130 СЕКЦИЯ ФАЙЛОВ. *
110140 ОФ вход-файл
510150 МЕТКИ ОПУЩЕНЫ •
510160 ЗАПИСИ ДАННЫХ вход-запись.
110170 01 вход-запись.
* Только для ДОС ЕС. Имя реализации во фразе НАЗНАЧИТЬ для ОС ЕС
.южет быть,'например, таким: UR-6012-S-VXOD.
** Только для ДОС ЕС. Имя реализации во фразе НАЗНАЧИТЬ для ОС ЕС
ложет быть, например, таким: L’R-7030-SOTCHET.
22.1
010180 02 ЗАПОЛНИТЕЛЬ ШАБЛОН АА.
010190 02 отдел ШАБЛОН XXX.
010200 02 ЗАПОЛНИТЕЛЬ ШАБЛОН АА.
020010 02 кол-покупок ШАБЛОН 99.
020020 02 ЗАПОЛНИТЕЛЬ ШАБЛОН А.
020030 02 тип-покупки ШАБЛОН А.
020040 02 месяц ШАБЛОН 99.
020050 02 день ШАБЛОН 99.
020060 02 ЗАПОЛНИТЕЛЬ ШАБЛОН А.
020070 02 стоимость ШАБЛОН 999Т99.
020080 02 ЗАПОЛНИТЕЛЬ ШАБЛОН Х(59).
020090 ОФ файл-отчет
020100 МЕТКИ ОПУЩЕНЫ
020110 В ЗАПИСИ 121 ЛИТЕР
020120 ОТЧЕТ отчет-расходов.
020130 СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
020140 77 запомнить-месяц ШАБЛОН 99 ЗНАЧЕНИЕ 0.
020150 77 продолжение ШАБЛОН Х(13) ЗНАЧЕНИЕ ПРОБЕЛ.
020160 01 таблица-месяцев.
020170 02 запись-месяц.
020180 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'ЯНВАРЬ
020190 03 ЗАПОЛНИТЕЛЬ Ш X(9) ЗНАЧЕНИЕ 'ФЕВРАЛЬ '
020200 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'МАРТ _ /
030010 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'АПРЕЛЬ 1
030020 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'МАЙ_ '
030030 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'ИЮНЬ _ '
030040 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'ИЮЛЬ .. '
030050 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'АВГУСТ
030060 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'СЕНТЯБРЬ
030070 03 ЗАПОЛНИТЕЛЬ Ш X(9) ЗНАЧЕНИЕ 'ОКТЯБРЬ__'
030080 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'НОЯБРЬ '
030090 03 ЗАПОЛНИТЕЛЬ Ш Х(9) ЗНАЧЕНИЕ 'ДЕКАБРЬ
030100 0 запись-область ПЕРЕОПРЕДЕЛЯЕТ запись-месяц.
030110 03 назв-месяца Ш Х(9) ПОВТОРЯЕТСЯ 12 РАЗ.
030120 СЕКЦИЯ ОТЧЕТОВ.
030130 ОО отчет-расходов
030140 УПРАВЛЕНИЕ ПО КОНЦУ, месяц, день
030150 РАЗМЕР СТРАНИЦЫ 59 СТРОК
030160 ЗАГОЛОВОК 1
030170 ПЕРВЫЙ ФРАГМЕНТ 9
030180 ПОСЛЕДНИЙ ФРАГМЕНТ 48
030190 КОНЦОВКА 52.
030200 01 ТИП ЗАГОЛОВОК ОТЧЕТА.
040010 02 НОМЕР СТРОКИ 1
040020 НОМЕР СТОЛБЦА 27
040030 ШАБЛОН А(26) ЗНАЧЕНИЕ 'ТОРГОВАЯ ФИРМА'.
040040
040050 02 НОМЕР СТРОКИ 3
040060 НОМЕР СТОЛБЦА 26
040070 ШАБЛОН А(29) ЗНАЧЕНИЕ 'ОТЧЕТ РАСХОДОВ ЗА КВАРТАЛ'.
040080
040090 01 шапка-страницы
040100 ТИП ЗАГОЛОВОК СТРАНИЦЫ.
040110 02 НОМЕР СТРОКИ 5.
040120 03 НОМЕР СТОЛБЦА 30
040130 ШАБЛОН А(9)
040140 ИСТОЧНИК назв-месяца (месяц).
040150 03 НОМЕР СТОЛБЦА 39
040151 ШАБЛОН А(12)
040152 ЗНАЧЕНИЕ 'РАСХОДЫ'.
040153 222 03 НОМЕР СТОЛБЦА 52
040160 ШАБЛОН X (13)
040170 ИСТОЧНИК продолжение.
040180 02 НОМЕР СТРОКИ 7.
040190 03 НОМЕР СТОЛБЦА 2
040200 ШАБЛОН Х(36)
050010 ЗНАЧЕНИЕ 'МЕСЯЦ ДЕНЬ ОТДЕЛ КОЛ-ПОКУПОК'.
050020 03 НОМЕР СТОЛБЦА 40
050030 ШАБЛОН Х(27)
050040 ЗНАЧЕНИЕ '^ТИП СТОИМОСТЬ ОБЩ-СТОИМ'.
050050 01 строка-фрагмент
050051 ТИП ФРАГМЕНТ
050052 НОМЕР СТРОКИ ПЛЮС 1.
050060 02 НОМЕР СТОЛБЦА 2 ОПРЕДЕЛЯЕТ ГРУППУ
050070 ШАБЛОН А(9) ИСТОЧНИК назв-месяца (месяц).
050080 02 НОМЕР СТОЛБЦА 13 ОПРЕДЕЛЯЕТ ГРУППУ
050090 ШАБЛОН 99 ИСТОЧНИК день.
050100 02 НОМЕР СТОЛБЦА 19 ШАБЛОН XXX ИСТОЧНИК отдел.
050110 02 НОМЕР СТОЛБЦА 32 ШАБЛОН П9 ИСТОЧНИК кол-иикупп».
050120 02 НОМЕР СТОЛБЦА 42 ШАБЛОН А ИСТОЧНИК тип-покушш.
050130 02 НОМЕР СТОЛБЦА 49 ШАБЛОН ПП9.99
050131 ИСТОЧНИК стоимость.
050140 01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО день.
050150 02 НОМЕР СТРОКИ ПЛЮС 2.
050160 03 НОМЕР СТОЛБЦА 2 ШАБЛОН Х(23)
050170 ЗНАЧЕНИЕ 'ПОКУПКИ И СТОИМОСТЬ ЗА'.
000180 03 НОМЕР СТОЛБЦА 25 ШАБЛОН П9
050181 ИСТОЧНИК запомнить-месяц.
050190 03 НОМЕР СТОЛБЦА 27 ШАБЛОН X ЗНАЧЕНИЕ ' —
050200 03 НОМЕР СТОЛБЦА 28 ШАБЛОН 99 ИСТОЧНИК день.
060010 03 НОМЕР. СТОЛБЦА 31 ШАБЛОН ПП9 СУММА кол-покупож.
060020 03 счет-за-день
060030 НОМЕР СТОЛБЦА 48 ШАБЛОН ППП9.99 СУММА стоимость,
060040 03 НОМЕР СТОЛБЦА 58 ШАБЛОН ПППП9.99 СУММА стоимость
060050 СБРОСИТЬ ПО КОНЦУ.
060060 02 НОМЕР СТРОКИ ПЛЮС 1 НОМЕР СТОЛБЦА 2
060070 ШАБЛОН Х(65) ЗНАЧЕНИЕ ВСЕ '*'.
060080 01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО месяц
060090 НОМЕР СТРОКИ ПЛЮС 1
060091 СЛЕДУЮЩАЯ ГРУППА НА СЛЕДУЮЩЕЙ СТРАНИЦЕ.
060100 02 НОМЕР СТОЛБЦА 12 ШАБЛОН А(18)
060101 ЗНАЧЕНИЕ 'ОБЩАЯ СТОИМОСТЬ ЗА'.
060110 02 НОМЕР СТОЛБЦА 31 ШАБЛОН А(9)
060120 ИСТОЧНИК назв-месяца (месяц).
060140 02 счет-за-месяц НОМЕР СТОЛБЦА 48
060150 ШАБЛОН ППП9.99 СУММА счет-за-день.
060160 01 ТИП УПРАВЛЯЕМАЯ КОНЦОВКА ПО КОНЦУ
060170 НОМЕР СТРОКИ НА СЛЕДУЮЩЕЙ СТРАНИЦЕ.
060171 02 НОМЕР СТОЛБЦА 16 ШАБЛОН А(31)
060180 ЗНАЧЕНИЕ 'ОБЩАЯ СТОИМОСТЬ ЗА КВАРТАЛ'.
060190 02 НОМЕР СТОЛБЦА 50 ШАБЛОН ПППП9.99
060191 СУММА счет-за-месяц.
060200 01 ТИП КОНЦОВКА СТРАНИЦЫ НОМЕР СТРОКИ 57.
070010 02 НОМЕР СТОЛБЦА 58 ШАБЛОН Х(5) ЗНАЧЕНИЕ 'ЛИСТ-'.
070020 02 НОМЕР СТОЛБЦА 63 ШАБЛОН 99
070021 ИСТОЧНИК СЧЕТЧИК-СТРАНИЦ.
070030 01 ТИП КОНЦОВКА ОТЧЕТА НОМЕР СТРОКИ ПЛЮС 1
070040 НОМЕР СТОЛБЦА 32 ШАБЛОН А(13)
070050 ЗНАЧЕНИЕ 'КОНЕЦ ОТЧЕТА'.
070060 РАЗДЕЛ ПРОЦЕДУР.
070070 ДЕКЛАРАТИВЫ.
070080 СЕКЦИЯ шапка-стр.
223
070090 ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ шапка-страниця.
070100 Переключатель-шапки-стр.
070110 ПЕРЕЙТИ К проверка-шапки-стр.
070120 Проверка-шапки-стр.
070130 ЕСЛИ месяц >= запомнить-месяц
070131 ПОМЕСТИТЬ '(ПРОДОЛЖЕНИЕ)'
070140 В продолжение ИНАЧЕ ПОМЕСТИТЬ ПРОБЕЛЫ В продолжение
070150 ПОМЕСТИТЬ месяц В запомнить-месяц.
070160 ПЕРЕЙТИ К выход-из-шапки-стр.
070170 Изменить-шапку-стр.
070180 ИЗМЕНИТЬ переключатель-шапки-стр ДЛЯ ПЕРЕХОДА К
070181 подавление-шапки-стр.
070190 Подавление-шапки-стр.
070200 ПОДАВИТЬ ПЕЧАТЬ.
080010 Выход-из-шапки-стр.
080020 ВЫЙТИ.
080030 КОНЕЦ ДЕКЛАРАТИВ.
080040 Открыть-файл.
080050 ОТКРЫТЬ ВХОДНОЙ вход-файл, ВЫХОДНОЙ файл-отчет.
080060 НАЧАТЬ отчет-расходов.
080070 Читать-данные.
080080 ЧИТАТЬ вход-файл; В КОНЦЕ ПЕРЕЙТИ К завершение.
080090 ГЕНЕРИРОВАТЬ строка-фрагмент.
080100 ПЕРЕЙТИ К читать-данные.
080110 Завершение.
080120 ВЫПОЛНИТЬ изменить-шапку-стр.
080130 ЗАКОНЧИТЬ отчет-расходов. >
080140 ЗАКРЫТЬ вход-файл, файл-отчет.
080150 ОСТАНОВИТЬ РАБОТУ.
Результаты выполнения этой программы приведены на рис. 23 —
28. Соответствие между цифрами, которыми на рис. 23 — 28 отмечень
группы в отчете (цифры в квадратах), и описанием этих групп в про
грамме дается ниже.
1 — заголовок отчета, описанный в исходной программе в строках 030200 —
040080;
2 — заголовок страницы, описанный в строках 040090 — 050040;
3 — группа типа ФРАГМЕНТ, описанная в строках 050050 — 050131. Tai
как это первая группа типа ФРАГМЕНТ после прерывавия управления, i
ней появляются данные, описанные с фразой ОПРЕДЕЛЯЕТ ГРУППУ (стро
ки 050060 — 050090);
4 — группа отчета типа ФРАГМЕНТ, в которой отсутствуют данвые, опн
санные с фразой ОПРЕДЕЛЯЕТ ГРУППУ, так как перед выводом этой группь
прерывания управления не произошло;
5 — младШая управляемая концовка, которая выводится при измененш
дня месяца, например при переходе с 26 января на 27 января. Она описан;
в строках 050140 — 060070;
6 — концовка страницы, описанная в строках 060200 — 070021;
7 — управляемая концовка более высокого уровня, чем 5. Она выводите:
прв изменении месяца года. Описана в строках 060080 — 060150;
8 — управляемая концовка самого высокого уровня. Она выводится толь
ко в конце отчета. Описана в строках 060160 — 060191;
9 — концовка отчета, описанная в строках 070030 — 070050.
Строки 070070 — 080030 исходной программы иллюстрируют применеии
оператора ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ. Каждый раз, когда начинаете
новая страница, устанавливается причина перехода ид, новую страницу: проц
зошло изменение месяца или была достигнута физическая граница страницы
Если произошло изменение месяца, в заголовок страницы пересылаются пре
елы, в противном случае — литерал '(ПРОДОЛЖЕНИЕ)'.
224
10. СЕГМЕНТАЦИЯ
10.1. ОБЩИЕ СВЕДЕНИЯ
Средства сегментации позволяют программисту предусмотреть
на уровне исходного языка перекрытие частей рабочей программы.
В программе на Коболе средства сегментации применяются в разделе
процедур, а в целях более гибкого распределения памяти — также
в разделе оборудования.
При использовании сегментации раздел процедур программы
разбивается на отдельные сегменты, часть из которых не присутст-
вует в основной памяти машины на протяжении всего времени выпол-
нения программы, а вызывается по мере необходимости, занимая в
памяти одно и то же место. Таким образом, ограничив количество сег-
ментов в программе, которые должны постоянно находиться в основ-
ной памяти, можно выполнить большую программу в выделенной об-
ласти основной памяти.
10.2. ТИПЫ СЕГМЕНТОВ
При сегментации программы раздел процедур обязательно должен
состоять из секций, каждая из которых с помощью номера сегмента
в заголовке секции классифицируется как принадлежащая к определен-
ному сегменту.
Формат:
СЕКЦИЯ имя-секции [номер-сегмента].
Номер-сегмента представляет собой целое число в интервале от
О до 99. Если номер-сегмента в заголовке секции отсутствует, подра-
зумевается, что номер-сегмента для этой секции равен нулю.
Секции, имеющие одинаковый номер сегмента, образуют сегмент
программы с этим номером.
В декларативной части раздела процедур секции не должны содер-
жать в своих заголовках номеров сегментов. Они рассматриваются как
принадлежащие к сегменту с нулевым номером.
Сегменты исходной программы в рабочей программе образуют фик-
сированную часть и независимые сегменты.
Фиксированная часть — это часть рабочей программы,
которая логически рассматривается как постоянно находящая-
ся в основной памяти. В нее входят все сегменты в номерами от 0 до 49,
среди которых различают сегменты двух типов—постоянные и перек-
рываемые фиксированные.
Постоянный сегмент — физически постоянный сег-
мент, т. е. сегмент фиксированной части программы, который ни при
каких условиях не может быть перекрыт другим сегментом программы.
Перекрываемый фиксированный сегмент —
это сегмент фиксированной части, который, в отличие от постоянного,
может быть при необходимости перекрыт другим сегментом для более
8 Зак. 73 225
экономного использования памяти. Однако при обращении к нему
такой сегмент всегда доступен программе в том состоянии, в котором
он был при последнем использовании, т. е. перекрываемые фиксиро-
ванные сегменты логически могут рассматриваться как постоянные.
В зависимости от размера основной памяти число постоянных, а
следовательно, и перекрываемых сегментов фиксированной части
может изменяться посредством фразы ГРАНИЦА СЕГМЕНТОВ в раз-
деле оборудования. Если фраза ГРАНИЦА СЕГМЕНТОВ не исполь-
зуется, все сегменты с номерами от 0 до 49 относятся к постоянным
сегментам.
Сегменты с номерами от 50 до 99 представляют собой независимые
сегменты. Независимый сегмент — это такая часть рабо-
чей программы, которая может перекрывать фиксированный или дру-
гой независимый сегмент и может перекрываться ими. При обращении
к независимому сегменту следует помнить, что он доступен в его ис-
ходном состоянии.
10.3. ФРАЗА ГРАНИЦА СЕГМЕНТОВ
Фраза ГРАНИЦА СЕГМЕНТОВ указывается в параграфе РАБО-
ЧАЯ-МАШИНА и позволяет программисту уменьшить число постоян-
ных сегментов в фиксированной части программы, сохранив за осталь-
ными сегментами фиксированной части логические характеристики
постоянных сегментов.
Формат:
[ГРАНИЦА СЕГМЕНТОВ номер-сегмента]
Номер-сегмента должен быть целым числом в диапазоне от 1 до
49.
Когда фраза ГРАНИЦА СЕГМЕНТОВ указана, все сегменты с но-
мерами от 0 до границы сегментов, но не включая ее, считаются по-
стоянными сегментами рабочей программы. Сегменты с номерами от
границы сегментов до 49 считаются перекрываемыми фиксированным»
сегментами.
Если фраза ГРАНИЦА СЕГМЕНТОВ опущена, все сегменты с но-
мерами от 0 до 49 считаются постоянными сегментами программы.-
10.4. ПЛАНИРОВАНИЕ СТРУКТУРЫ
СЕГМЕНТИРОВАННОЙ ПРОГРАММЫ
При планировании структуры сегментированной программы не-
обходимо учитывать логические требования, частоту обращения к сек-
циям и их связь с другими секциями. Секции, которые должны быть
всегда доступны для обращения и к которым обращаются часто, обыч-
но включаются в постоянные сегменты, а секции, используемые реже, —
в один из фиксированных или независимых сегментов (в соответствии
с логическими требованиями). Чем чаще к секции обращаются, тем
меньше должен быть номер ее сегмента. Секции, которые часто обра-
226
щаются друг к другу, должны принадлежать одному сегменту, т. е.
иметь одинаковые номера сегментов.
Транслятор обеспечивает выполнение процедур сегментированной
программы в том порядке, в котором они были представлены для
трансляции, независимо от их номеров сегментов. Программист
может предусмотреть другой порядок выполнения с помощью опера-
торов управления последовательностью выполнения процедур. Уп-
равление может быть передано любому параграфу любой секции не-
зависимо от того, в каком сегменте он находится. Транслятор преду-
сматривает в рабочей программе команды для загрузки и (или) инициа-
лизации сегмента, когда это требуется.
Когда к имени процедуры в независимом сегменте обращаются из
любого другого сегмента с помощью оператора ВЫПОЛНИТЬ, то
сегмент, к которому обращаются, делается доступным в его начальном
состоянии для каждого выполнения оператора ВЫПОЛНИТЬ.
Если к имени процедуры в постоянном сегменте обращаются с по-
мощью оператора ВЫПОЛНИТЬ, содержащегося в независимом сег-
менте, то последний инициализируется перед возвратом ему управ-
ления после выполнения указанной процедуры.
10.5. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ИЗМЕНИТЬ
И ВЫПОЛНИТЬ В СЕГМЕНТИРОВАННОЙ ПРОГРАММЕ
При использовании оператора ИЗМЕНИТЬ в сегментированной
программе следует учитывать следующее:
а) если оператор ПЕРЕЙТИ находится в секции с номером сегмен-
та 50 и больше, его нельзя модифицировать оператором ИЗМЕНИТЬ
в секции с другим номером сегмента;
б) если оператор ПЕРЕЙТИ находится в секции с номером сегмен-
та меньше 50, он может быть модифицирован оператором ИЗМЕНИТЬ
в любой секции, даже если оператор ПЕРЕЙТИ находится в сегменте
программы, который еще не был вызван для выполнения.
В соответствии с требованиями унифицированного Кобола при
использовании оператора ВЫПОЛНИТЬ в сегментированной про-
грамме необходимо учитывать следующее:
а) если оператор ВЫПОЛНИТЬ находится в секции с номером
сегмента меньше границы сегментов, он может иметь в своей области
действия секции с номером сегмента меньше 50 или секции, содер-
жащиеся полностью в одном сегменте с номером больше 49;
б) если оператор ВЫПОЛНИТЬ находится в секции, номер сег-
мента которой равен или больше границы сегментов, он может иметь
в своей области действия секции с таким же номером сегмента, как и
секция, содержащая оператор ВЫПОЛНИТЬ, или секции с номером
сегмента меньше, чем граница сегментов.
Однако трансляторы Кобола ЕС ЭВМ позволяют оператору ВЫ-
ПОЛНИТЬ обращаться к секциям с любыми номерами сегментов.
8*
227
10.6. ОСОБЕННОСТИ ТРАНСЛЯЦИИ, РЕДАКТИРОВАНИЯ
И ВЫПОЛНЕНИЯ СЕГМЕНТИРОВАННОЙ ПРОГРАММЫ
После трансляции сегментированная программа представляет
структуру с перекрытием, состоящую из нескольких объектных мо-
дулей, которым предшествуют управляющие операторы Редактора.
Каждый сегмент, номер которого равен или превышает границу сег-
ментов (или 49, если не указана фраза ГРАНИЦА СЕГМЕНТОВ),
генерируется транслятором как отдельный объектный модуль и со-
стоит только из команд. Все постоянные сегменты объединяются в
корневой сегмент, который включает также все таблицы
рабочей программы, области ввода-вывода и используемые программы
библиотеки Кобола. Если в сегментированной программе используется
оператор ВЫЗВАТЬ для связи с другими программами, вызываемые
программы также включаются в корневой сегмент и загружаются
вместе с фиксированной частью основной программы, как если бы они
имели номер сегмента нуль.
Выполнение сегментированной программы начинается в корне-
вом сегменте, т. е. в первом из постоянных сегментов. Если программа
не содержит постоянных сегментов или если первой должна выполнять-
ся секция, входящая в состав перекрываемого или независимого сег-
мента, транслятор формирует фиктивный постоянный сегмент, кото-
рый будет инициировать выполнение первого перекрываемого или не-
зависимого сегмента.
Примечание. В шаге редактирования сегментироваииой программы
(только для OG EG) в операторе управления заданиями EXEG для Редактора
связей должен быть указан параметр OVLY. При подготовке сегментированной
программы н выполнению Загрузчик использоваться не может.
Пример.
Пусть, например, программа сегментирована следующим обра-
зом:
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, segm.
РАЗДЕЛ ОБОРУДОВАНИЯ. ' ' '
РАБОЧАЯ-МАШИНА. EG-1022 ГРАНИЦА СЕГМЕНТОВ 15.
РАЗДЕЛ ДАННЫХ.
РАЗДЕЛ ПРОЦЕДУР.
СЕКЦИЯ секц-1 8.
СЕКЦИЯ секц-2 8.
СЕКЦИЯ секц-3 16.
СЕКЦИЯ секц-4 8.
СЕКЦИЯ секц-5 50.
СЕКЦИЯ секц-6 16.
СЕКЦИЯ секц-7 51.
228
Использование основной памяти в рабочее время для этой прогрям.
мы показано на рис. 31.
Области б бода -
вывода а таблицы
рабочей программы
СЕКЦ-1(8}
Область
корневого
сегмента
С£КЦ-2(в)
► Постоянный сегмент
СЕКЦ-й(8)
Независимые сегменты
СЕКЦ-3(16)
СЕКЦ-5(50)
Транзитная
к область
CEKU-7(5f)
СЕКЦ-б(16}
Фиксированный пере-
крываемый сегмент
Рис. 31. Использование основной памяти при выполнении сегментирован»,
ной программы.
11. СВЯЗЬ МЕЖДУ ПРОГРАММАМИ
11.1. ОБЩИЕ ПОЛОЖЕНИЯ
Средства связи между программами дают возможность осуществ
пять связь по управлению и данным между программами на языке
Кобол или связь программ на языке Кобол с программами на других
языках.
Исходная программа, которая передает управление другой про-
грамме, называется вызывающей. Программа, которой пере-
дается управление от вызывающей программы, называется вызы-
ваемой. Вызываемая программа, в свою очередь, сама может быть
8в Заа. 73
229
вызывающей, однако она не должна обращаться к программе, прямо
или косвенно вызвавшей ее, а также к самой себе.
Программа самого высокого уровня на языке Кобол, вызванная
в выполняемом шаге задания, называется основной программой.
Все остальные программы на языке Кобол в данном шаге задания бу-
дут подпрограммами.
Программы на других языках программирования ЕС ЭВМ, кото-
рые соответствуют правилам связи программ на языке Кобол, могут
быть вызваны и вызывать программы на Коболе. Однако практически
связь с программами на Фортране и ПЛ/1 имеет много особенностей,
которые требуют, тщательного их изучения для осуществления такой
связи.
Вызываемая программа может вернуть управление только непо-
средственно вызвавшей ее программе.
При установлении связи между программами 'вызывающая про-
грамма должна указать точку входа в вызываемой программе и, если
необходимо, данные для передачи; вызываемая программа должна
иметь соответствующую точку входа и быть способной принять эти
данные. Кроме того, вызываемая программа должна установить
связь с вызывающей программой для возврата ей управления.
«
11.2. СРЕДСТВА СВЯЗИ В ВЫЗЫВАЮЩЕЙ ПРОГРАММЕ. '
ОПЕРАТОР ВЫЗВАТЬ
Для установления связи с вызываемой программой вызывающая
программа в нужной точке должна содержать следующий оператор:
ВЫЗВАТЬ литерал [ИСПОЛЬЗУЯ идентификатор-1 [идентификаТор-2]...]
Литерал — это нечисловой литерал, который представляет
собой имя точки входа в вызываемой программе. Литерал должен быть
составлен в соответствии с правилами образования имени программы.
Для установления соответствия между вызываемой и вызывающей
программами используются первые восемь литер литерала.
Идентификаторы, указанные во фразе ИСПОЛЬЗУЯ оператора
ВЫЗВАТЬ, определяют данные в вызывающей программе, к которым
можно будет обратиться в вызываемой программе. Каждый иденти-
фикатор представляет данное, определенное в секции файлов, секции
рабочей памяти или секции связи вызывающей программы. Допол-
нительно, если вызываемая программа написана на языке Ассемб-
лера, операндами фразы ИСПОЛЬЗУЯ могут быть имена файлов и
имена процедур. Если операнд фразы ИСПОЛЬЗУЯ является именем
файла, файл должен быть открыт в вызывающей программе. В вызы-
ваемую программу передаются в виде списка параметров адреса ука-
занных идентификаторов. Если во фразе ИСПОЛЬЗУЯ указано имя
файла, в вызываемую программу передается для ДОС ЕС адрев таб-
лицы DTF, а для ОС ЕС адрес таблицы DCB или DECB в зависимости
от метода доступа. Если во фразе ИСПОЛЬЗУЯ указано имя про-_
230
цедуры, в вызываемую программу передается адрес начала этой Про-
цедуры.
Оператор ВЫЗВАТЬ выполняет передачу управления вызываемой
программе. При первом входе в вызываемую программу ее состояние
представляет собой исходное состояние этой программы. При каждом
последующем входе ее состояние такое, каким оно было при послед-
нем выходе из этой программы. Поэтому сам программист отвечает за
восстановление в вызываемой программе, если это необходимо, исход-
ных значений операторов ПЕРЕЙТИ, которые были изменены, а так-
же данных,, которые требуются в их исходном состояний, и специаль-
ных регистров.
Кроме того, необходимо учитывать следующее:
а) если из области действия оператора ВЫПОЛНИТЬ произво-
дится переход, после которого происходит выход из программы, этот
оператор ВЫПОЛНИТЬ все еще остается в силе при последующем
входе;
б) текущее значение операндов в операторах ПЕЧАТАТЬ ИЗМЕ-
НЕННЫЙ и ПЕЧАТАТЬ ИЗМЕНЕННЫЙ Q ИМЕНЕМ сравнивается
в их значением во время последнего выполнения этих операторов неза-
висимо от того, было это выполнение во время действия того же опе-
ратора ВЫЗВАТЬ или нет;
в) счетчик, связанный о отладочным оператором ПРИ, инициали-
зируется только один раз при первом входе в программу. При каждом
последующем выполнении оператора ПРИ счетчик будет содержать фак-
тическое количество выполнений оператора независимо от того, бы-
ли ли предыдущие выполнения во время действия того же оператора
ВЫЗВАТЬ или нет.
Вызываемая программа не может быть сегментированной.
11.3. СРЕДСТВА СВЯЗИ В ВЫЗЫВАЕМОЙ ПРОГРАММЕ.
ОПЕРАТОР ВХОД
Для связи с вызывающей программой в вызываемой программе
служат следующие конструкции;
а) специальный формат заголовка раздела процедур
РАЗДЕЛ ПРОЦЕДУР [ИСПОЛЬЗУЯ идентификатор-1 [идентификатор-2]...].;
\ б) оператор ВХОД.
ЕУги конструкции определяют точки входа в вызываемой программе
на Коболе. Каждая точка входа характеризуется своим именем. Оно
используется в операторе ВЫЗВАТЬ вызывающей программы. Лю-
бая программа на Коболе имеет по меньшей мере одну точку входа,
поскольку заголовок раздела процедур обязательно присутствует в
каждой программе. Имя этой точки входа совпадает с именем-програм-
мы в параграфе ПРОГРАММА раздела идентификации.
Дополнительные точки входа могут устанавливаться оператором
ВХОД, имеющим следующий формат:
ВХОД литерал [ИСПОЛЬЗУЯ идентификатор-1 [идентификатор-2]...]
6в*
231
Литерал представляет собой имя дополнительной точки входа.
Оно должно быть отлично от имени программы, но образуется по тем
же правилам, что и имена программ. Для программ, выполняемых
в одном шаге задания, все имена точек входа должны быть уникаль-
ными.
Управление в точку входа передается оператором ВЫЗВАТЬ в
вызывающей программе.
Когда связь с вызываемой программой устанавливается оператором
ВЫЗВАТЬ, в котором литерал есть имя вызываемой программы,
выполнение программы начинается с первого оператора раздела про-
цедур, исключая декларативные секции.
* Когда связь с вызываемой программой устанавливается оператором
ВЫЗВАТЬ, в котором литерал является именем точки входа, опре-
деленной оператором ВХОД, выполнение программы начинается • пер-
вого оператора,.следующего за этим оператором ВХОД.
Идентификаторы, указанные во фразе ИСПОЛЬЗУЯ (как в опе-
раторе ВХОД, так и в заголовке раздела процедур), представляют
данные, определенные в вызывающей программе и используемые в вы-
зываемой. Они соответствуют операндам фразы ИСПОЛЬЗУЯ в опе-
раторе ВЫЗВАТЬ вызывающей программы. Каждое данное в этом
списке должно быть описано в секции связи вызываемой программы
и иметь номер уровня 01 или 77. Если во фразе ИСПОЛЬЗУЯ заголов-
ка раздела процедур или оператора ВХОД названо групповое данное,
имена данных, подчиненных ему в секции связи программы, также
могут использоваться в процедурных операторах программы.
11.4. ПЕРЕДАЧА ДАННЫХ
Для обеспечения связи по данным между программами в языке
Кобол служит фраза ИСПОЛЬЗУЯ, которая делает доступными вызыва-
емой программе данные, определенные в вызывающей программе.
Фраза ИСПОЛЬЗУЯ может быть указана в операторе ВЫЗВАТЬ,
операторе ВХОД и заголовке раздела процедур.
Формат 1 (в вызывающей программе):
ВЫЗВАТЬ литерал [ИСПОЛЬЗУЯ идентификатор-! [идентификатор-2] ...]
Формат 2 (в вызываемой программе):
вариант 1
ВХОД литерал [ИСПОЛЬЗУЯ идентификатор-1 [идентификатор-21....]
вариант 2
РАЗДЕЛ ПРОЦЕДУР [ИСПОЛЬЗУЯ идентификатор-! [идентификатор-2]...].
В рабочее время между идентификаторами в двух списках ИС-
ПОЛЬЗУЯ (в списке оператора ВЫЗВАТЬ в вызывающей программе
и в списке ваголовка раздела процедур или оператора ВХОД в вызы-
ваемой программе) устанавливается взаимно-однозначное соответствие.
Соответствие устанавливается по позиции идентификатора в списке.
232
’Идентификаторы соответствующих данных в списках не обязаны сов-
падать, но описания данных должны быть эквивалентным». Например,
если в вызывающей программе данное описано на уровне 77 и прей*
ставляет строку из 30 литер, соответствующее ему данное в вызы-
ваемой программе тоже должно представлять данное из 30 литер,
но может быть описано на уровне 01 как групповое данное, суммарный
размер’ элементарных данных которого равен 30 литерам.
В вызываемой программе передаваемые данйые могут быть опи-
саны в секции связи только на уровне 01 и 77, но в вызывающей
программе они могут иметь любой номер уровня. Так как транслятор
предполагает, что данные секции связи в вызываемой программ
выровнены на границу двойного слова, программист должен обеспе-
чить соответствующее выравнивание передаваемых данных в вызываю-
щей программе. В частности, если из вызывающей программы пере-
дается групповое данное с номером уровня, отличным от 01, содержа-
щее данные с использованием ДЛЯ ВЫЧИСЛЕНИЙ, ДЛЯ ВЫЧИС-
ЛЕНИЙ-1 или ДЛЯ ВЫЧИСЛЕНИЙ-2, оно должно быть выровнено
на соответствующую границу. Если групповому данному, имеющему
в вызывающей программе номер уровня, отличный от 01, в вызываемой
программе будет соответствовать идентификатор на урбвне 01, оно
должно быть выровнено на границу двойного слова.
Количество идентификаторов во фразе ИСПОЛЬЗУЯ в вызывае-
мой программе может быть меньше количества идентификаторов в
соответствующем операторе ВЫЗВАТЬ вызывающей программы.
В этом случае вызываемая программа может обратиться только к
тем данным, идентификаторы которых указаны в ее фразе ИСПОЛЬ-
ЗУЯ.
Когда в вызываемой программе присутствует фраза ИСПОЛЬЗУЯ
в формате 2, рабочая программа выполняется так, как если бы каждое
появление идентификатора-1, идентификатора-2 и т. д. в разделе про-
цедур было заменено соответствующим идентификатором из фразы
ИСПОЛЬЗУЯ оператора ВЫЗВАТЬ в вызывающей программе.
Другими словами, соответствующие идентификаторы относятся к од-
ному набору данных, который определен в вызывающей программе.
Если данные передавать ненужно, фраза ИСПОЛЬЗУЯ в вызываю-
щей и вызываемой программах опускается.
Если основная программа на языке Кобол вызывается для выпол-
нения оператором ЕХЕС управления заданиями, то (только для ОС EQ
фраза ИСПОЛЬЗУЯ может быть применена в заголовке раздела про-
цедур основной программы для приема в рабочее время параметров
йз поля PARM оператора ЕХЕС. В этом случае фраза ИСПОЛЬЗУЯ
в ваголовке раздела процедур должна содержать единственный опе-
ранд— идентификатор-1, который должен быть описан в секции свя-
зи на уровне 01. Первые два байта идентификатора-1 должны быть
определены как двоичное поле в шаблоном 39(4) и будут содержать
количество байт информации в поле PARM или нуль, если поле
PARM в операторе ЕХЕС отсутствует. Остальная часть идентифика-
тора-! содержит информацию, указанную в поле PARM. Максималь-
ная длина передаваемой информации равна 100 байтам.
233
11.5. ЗАВЕРШЕНИЕ ПРОГРАММЫ
В языке Кобол есть три оператора завершения программы: ОСТА-
НОВИТЬ РАБОТУ, ВЫЙТИ ИЗ ПРОГРАММЫ, ВЕРНУТЬСЯ.
Формат этих операторов и их действие в основной программе и
подпрограмме описаны в табл. 27.
Таблица 27
Оператор завершения программы Действие оператора в основной программе Действие оператора в подпрограмме
ОСТАНОВИТЬ РАБОТУ В ДОС ЕС возврат к В ДОС ЕС возврат к
имя-параграфа. операционной системе н окончание шага- зада- ния. В ОС ЕС возврат в вы- зывающую программу (возможно к операцион- ной системе и в этом случае окончание шага задания) операционной системе и окончание шага зада- ния. В ОС ЕС возврат к про- грамме, вызвавшей ос- новную программу, (возможно к операцион- ной системе и в этом случае окончание шага задания)
ВЫЙТИ ИЗ ПРОГРАММЫ, Никакого действия Возврат к вызывающей программе
ВЕРНУТЬСЯ. В ДОС ЕС ненормаль- ное завершение задания. В ОС ЕС возврат в вы- зывающую программу (возможно к операцион- ной системе и в этом случае окончанве шага задания) Возврат к вызывающей программе
Формат и правила использования оператора ОСТАНОВИТЬ при-
ведены в п. 5.2.4.
Операторы ВЫЙТИ ИЗ ПРОГРАММЫ и ВЕРНУТЬСЯ отмечают
логический конец вызываемой программы. Эти операторы обеепечивают
восстановление необходимых регистров и возврат управления от вы-
зываемой программы к вызывающей.
Оператору ВЫЙТИ должно предшествовать имя параграфа и он
должен быть единственным оператором в параграфе.
Если оператор ВЫЙТИ ИЗ ПРОГРАММЫ встречается в програм-
ме, вызванной по оператору ВЫЗВАТЬ, управление возвращается
к оператору вызывающей программы, следующему непосредственно
за оператором ВЫЗВАТЬ. Если оператор ВЫЙТИ ИЗ ПРОГРАММЫ
встречается в программе, которая не находится под управлением опе-
тора ВЫЗВАТЬ, управление переходит через точку выхода к первому
оператору следующего параграфа.
Оператор ВЕРНУТЬСЯ должен появляться как единственный или
последний оператор из верив повелительных операторов в предло-
жении.
2М
Программист может предусмотреть передачу кода возврата
(только для ОС ЕС) из вызываемой программы вызывающей программе
или операционной системе. Для этой цели служит специальный ре-
гистр КОД-ВОЗВРАТА, который необходимо установить на требуе-
мый код перед выполнением оператора завершения программы. Пер-
воначально этот специальный регистр установлен в программе в нуль,
что означает успешное завершение программы. Все другие значения
регистра должны быть кратны 4. Максимальное значение в поле этого
специального регистра равно 4095.
Код возврата может использоваться операционной системой для
определения следующего задания или шага задания во входном по-
токе.
11.6. ПРИМЕР ОРГАНИЗАЦИИ СВЯЗИ
МЕЖДУ ПРОГРАММАМИ
Здесь приведены фрагменты двух программ: вызывающей програм-
мы с именем prog и вызываемой с именем progl, на которых иллюст-
рируется применение фразы ИСПОЛЬЗУЯ для передачи данных из
одной программы в другую, оператора ВХОД для определения до-
полнительной точки входа, оператора ВЕРНУТЬСЯ для возврата в
вызывающую программу и других ередетв евязи между программами.
Вызывающая программа
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, prog.
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
01 /'табель.
03 зарплата ШАБЛОН 39(5)Т99.
03 ставка ШАБЛОН 39Т99.
03 период ШАБЛОН 399Т99.
РАЗДЕЛ ПРОЦЕДУР.
ВЫЗВАТЬ 'progl' ИСПОЛЬЗУЯ табель.
ВЫЗВАТЬ 'Itos' ИСПОЛЬЗУЯ табель.
ОСТАНОВИТЬ РАБОТУ.
Вызываемая программа
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, progl.
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ СВЯЗИ.
01 платеж-вед.
235
02 оплата ШАБЛОН 39(Б)Т99.
02 время-ставка ШАБЛОН 39Т99.
02 период . ШАБЛОН 399Т9.
РАЗДЕЛ ПРОЦЕДУР ИСПОЛЬЗУЯ платеж-вед.
ВВРНУТЬСЯ.
ВХОД 'itog' ИСПОЛЬЗУЯ платеж-вед.
ВЕРНУТЬСЯ.
Обработка начинается в программе prog. Когда достигается опе-
ратор ВЫЗВАТЬ 'progl' ИСПОЛЬЗУЯ табель, управление передается
первому оператору раздела процедур в программе progl. В вызываю-
щей программе операнд фразы ИСПОЛЬЗУЯ идентифицируется как
«табель».
Когда progl получает управление, значения данного «табель» ста-
новятся доступными программе progl, однако в progl к этому данному
обращаются как к «платеж-вед». Заметим, что фразы ШАБЛОН для*
элементарных данных, подчиненных «платеж-вед», такие же, как фразы
ШАБЛОН для элементарных данных, подчиненных данному «табель».
Когда обработка в программе progl достигает первого оператора
ВЕРНУТЬСЯ, управление возвращается в prog к оператору, следую-
щему непосредственно за первым оператором ВЫЗВАТЬ. Затем об-
работка продолжается в prog до тех пор, пока не будет достигнут опе-
ратор ВЫЗВАТЬ 'itog' ИСПОЛЬЗУЯ табель. Управление снова пе-
редается progl, но на этот раз обработка начинается с оператора,
следующего за оператором ВХОД. Значения данного «табель» снова
становятся доступными для progl посредством операнда «платеж-вед»
фразы ИСПОЛЬЗУЯ оператора ВХОД. Когда обработка достигает
второго оператора ВЕРНУТЬСЯ, управление возвращается в prog
к оператору, следующему непосредственно за вторым оператором
ВЫЗВАТЬ.
Если значения данного «табель» изменяются программой prog
или progl в промежутке между выполнением первого и второго опе-
раторов ВЫЗВАТЬ, значения, передаваемые во время выполнения
второго ВЫЗВАТЬ, будут измененными, а не первоначальными зна-
чениями. Если-программист хочет использовать первоначальные зна-
чеция, он сам должен обеспечить их сохранение.
11.7. СВЯЗЬ С ПРОГРАММАМИ
НА ЯЗЫКЕ АССЕМБЛЕРА
В объектной программе, формируемой транслятором Кобола,
кодировка операторов ВЫЗВАТЬ, ВЕРНУТЬСЯ и ВЫЙТИ ИЗ
ПРОГРАММЫ обеспечивает организацию связи между вызывающей
и вызываемой программами в соответствии с соглашениями о связях,
принятыми в системе. Эти соглашения детально описаны в книге [31
и включают:
236 -
а) правильное использование общих регистров при установлении,
связи;
б) передачу данных посредством списка параметров;
в) резервирование в вызывающей программе области сохра-
н ен и я. В ней вызываемая программа должна сохранить содержи-
мое общих регистров, которые изменяются в процессе выполнения
программы;
г) восстановление содержимого общих регистров при выходе из
вызываемой программы.
Программы на языке Ассемблера должны быть подготовлены в со-
ответствии с этими соглашениями о связях.
11.8. РЕДАКТИРОВАНИЕ СВЯЗЕЙ МЕЖДУ ПРОГРАММАМИ
Всякий раз, когда в вызываемой программе указана точка входа,
определяется входное имя. Входное имя — это имя, к которому
можно обратиться в другой, отдельно протранслированной программе.
Всякий раз, когда в вызывающей программе используется имя точки
входа, определяется внешнее имя. Внешнее имя — это имя,
определяемое в качестве входного имени в другой, отдельно протранс-
лированной программе. »
Редактор разрешает внешние связи и объединяет вызывающие
и вызываемые программы в загрузочные модули.
Реализация оператора ВЫЗВАТЬ транслятором Кобола состоит
только в передаче управления вызываемой программе. Поэтому,
если программистом не предусматриваются какие-нибудь специальные
способы загрузки вызываемых программ (с помощью управляющих
операторов Редактора связей или макрокоманд связи в Супервизором),
все вызывающие и вызываемые программы должны быть объединены
в один загрузочный модуль.
Если все необходимые вызываемые программы не могут одновре-
менно разместиться в имеющейся основной памяти, следует применить •-
технику перекрытия. Структура программы с перекрытием может быть
предварительно спланированной или (только для ОС ЕС) динамиче-
ской. Если структура с перекрытием может быть спланирована пред-
варительно, она задается в помощью управляющих операторов Ре-
дактора связей.
Пусть, например, программа А1 должна быть корневой, а вызы-
ваемые из А1 программы А2, АЗ и А4 могут перекрывать друг друга.
В ОС ЕС поток входных данных Редактора ввязей для создания такой
структуры должен выглядеть, как показано' на рис. 32. Операторы
OVERLAY указывают Редактору, что программы А2, АЗ и А4 долж-
ны перекрывать друг друга во время выполнения. В соответствии с
этими операторами, используя информацию о входных и внешних име-
нах в объектных программах, Редактор встраивает в формируемые
Нагрузочные модули специальные таблицы, на основании которых
Система автоматически будет обеспечивать загрузку нужных программ
в основную память, если при обращении к ним эти программы ока-
вались перекрыты другими программами.
237
В ДОС ЕС с помощью управляющего оператора PHASE Редактора
тоже можно определить структуру с перекрытием, однако система
не обеспечивает автоматической загрузки перекрываемых программ
при обращении к ним. Для выполнения программ такой етруктуры
необходимо в корневой модуль, постоянно находящийся в памяти, вклю-
чить подпрограмму на языке Ассемблера, которая загружала бы
нужные программы и передавала им управление. Поток входных дан-
ных Редактора для создания структуры с перекрытием в ДОС ЕС при-
веден на рис. 33 (OVERLAY — имя программы на языке Ассемблера
для загрузки вызываемых программ А2, АЗ, А4).
Рис. 32. Поток входных данных Редактора связей
для создания структуры с нгрекрытием в ОС EG
Операторы PHASE указывают Редактору, что в корневой модуль
входит программа А1 (на языке Кобол) и программа OVERLAY (на
языке Ассемблера). Модули А2, АЗ и А4 состоят из соответствующих
программ на Коболе и перекрывают друг друга в основной памяти.
Для каждого модуля, загружаемого во время выполнения, в секции
рабочей памяти вызывающей программы на уровне 01 или 77 необхо-
димо определить константу, описанную с фразой ШАБЛОН Х(8)
и имеющую значением имя модуля. Эта константа должна передавать-
ся в качестве параметра программе OVERLAY для загрузки нужного
модуля. Подробнее функции программы на языке Ассемблера рассмот-
рены ниже при описании организации динамической структуры.
Динамическую структуру (только для ОС ЕС) можно использовать
в тех случаях, когда до момента выполнения программы трудно опре-
делить структуру перекрытия. Это может быть, например, тогда, ко-
гда порядок загрузки модулей, образующих задачу, и характер их
взаимодействия зависят от обрабатываемых данных,
238
Для построения динамической структуры каждая часть програм-
мы, вызываемая в память отдельно от других, должна быть оформлена
в виде самостоятельного загрузочного модуля. Выполнение динами-
ческой структуры обеспечивается с помощью программы на языке
Ассемблера, которая выполняет загрузку нужного модуля, передачу
управления в указанную точку входа и, если требуется, освобождений
памяти, занимаемой модулем. Эти функции выполняются посредством
макрокоманд связи с Супервизором, таких, например, как LINK,
LOAD, DELETE, CALL.
Рис. 33. Поток входных данных Редактора для соз-
дания структуры с перекрытием в ДОС ЕС
Вызывающая программа на языке Кобол с помощью оператора
ВЫЗВАТЬ осуществляет связь а программой, обеспечивающей вы-
полнение динамической структуры, передавая в числе параметров имя
точки входа в вызываемой программе на языке Кобол. Когда вызы-
ваемая программа заканчивает работу, она возвращает управление
программе на языке Ассемблера, которая, в свою очередь, возвра-
щает управление вызывающей программе на Коболе. Таким образом,
все передачи управления между вызывающей и вызываемой програм-
мами на Коболе идут через программу на языке Ассемблера.
Построение динамической структуры требует от программиста
детальных знаний принятых в системе соглашений о связях между
программами, языка Ассемблера и макрокоманд связи а Супервизо-
ром,
12. БИБЛИОТЕКА
12.1. ОБЩИЕ ПОЛОЖЕНИЯ
Часто используемые статьи и процедуры исходной программы
Могут быть помещены (каталогизированы) в библиотеку исходных
Текстов Кобола. Во время трансляции эти статьи и процедуры мо-
гут быть извлечены из библиотеки и включены в нужное место исход-
йой программы с помощью оператора КОПИРОВАТЬ. Это избавляет
программиста от повторного написания в исходной программе часто
используемых статей и процедур. Таким образом могут быть катало-
гизированы, а затем использованы, например, стандартные описания
файлов, описания записей, процедуры и т. д.
В библиотеку также может быть включена целая исходная про-
грамма, которую впоследствии можно взять за основу для трансляции.
По оператору ОСНОВА транслятор извлекает из библиотеки эту про-
грамму и осуществляет ее трансляцию. При этом программа может быть
скорректирована на время трансляции посредством операторов ВСТА-
ВИТЬ и УДАЛИТЬ. Эту возможность удобно использовать во время
отладки -программы и проверки ее различных вариантов.
12.2. БИБЛИОТЕКИ ИСХОДНЫХ ТЕКСТОВ
В ДОС ЕС библиотека исходных текстов Кобола является частью
системной или личной библиотеки исходных модулей — подбиблиоте-
кой с фиксированным именем С. Все функции обслуживания библио-
тек в ДОС ЕС выполняются системой программ под общим названием
Библиотекарь. Добавление (каталогизация) и обновление книг в биб-
лиотеке осуществляется программой Библиотекаря MAINT.
В ОС ЕС библиотека исходных текстов Кобола представляет собой
определяемый программистом набор данных с библиотечной органи-
зацией. Этот набор данных определяется для шага трансляции опера-
тором DD управления заданиями с именем SYSLIB. В случае когда
для одного выполнения транслятора требуется более чем одна библио-
тека, соответствующие наборы данных описываются как сцепленные
с набором SYSLIB.
Примечание. Если при одном выполнении транслятора используются
в оператор ОСНОВА, и операторы КОПИРОВАТЬ, библиотека, необходимая для
оператора ОСНОВА, должна быть определена первой.
Создание библиотечных наборов данных, каталогизация и обнов-
ление разделов в таких наборах выполняются в ОС ЕС программой
обслуживания IEBUPDTE.
12.3. ОПЕРАТОР КОПИРОВАТЬ
Оператор КОПИРОВАТЬ позволяет включить в исходную про-
грамму статьи раздела данных, фразы раздела оборудования и про-
цедуры раздела процедур, предварительно помещенные в библиотеку.
240
Общий формат оператора КОПИРОВАТЬ имеет девять вариантов*
вариант 1(в секции конфигурации):
ИСХОДНАЯ-МАШИНА. оператор КОПИРОВАТЬ.
РАБОЧАЯ-МАШИНА, оператор КОПИРОВАТЬ.
СПЕЦИАЛЬНЫЕ-ИМЕНА. оператор КОПИРОВАТЬ.
вариант 2 (в секции ввода-вывода):
УПРАВЛЕНИЕ-ФАЙЛАМИ. оператор КОПИРОВАТЬ.
УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ. оператор КОПИРОВАТЬ.
вариант 3 (в параграфе УПРАВЛЕНИЕ-ФАЙЛАМИ):
ДЛЯ имя-файла оператор КОПИРОВАТЬ.
вариант 4 (в секции файлов):
ОФ имя-файла оператор КОПИРОВАТЬ.
©6 имя-сортируемого-файла оператор КОПИРОВАТЬ.
вариант 5 (в секции отчетов):
ОО имя-отчета оператор КОПИРОВАТЬ.
ОО имя-отчета [О КОДОМ мнемоническое-имя] оператор КОПИРОВАТЬ.
вариант 6 (в статье описания файла, в статье описания сор-
тируемого файла, в еекции рабочей памяти или секции связи):
01 ими-данного оператор КОПИРОВАТЬ.
вариант 7 (с группой отчета):
01 [имя-данного] оператор КОПИРОВАТЬ.
вариант 8 (в секции рабочей памяти или секции связи):
77 имя-данного оператор КОПИРОВАТЬ.
вариант 9 (в разделе процедур):
СЕКЦИЯ нмя-секции [номер-сегмеита]. оператор КОПИРОВАТЬ,
имя-параграфа, оператор КОПИРОВАТЬ.
Во всех этих случаях оператор КОПИРОВАТЬ должен быть пред-
ставлен в следующем формате:
КОПИРОВАТЬ имя-тексга [ПОДАВЛЯЯ]
[ЗАМЕНЯЯ слово-1
НА
'слоно-2
литерал-1
. идентификатор-1,
[слово-3 НА
слово-4
литерал-2 ]
,идентификатор-2
241
Имя-текста — это имя, под которым копируемый текст содержится
в библиотеке (имя книги в ДОС ЕС или имя раздела в ОС ЕС). Имя-
текста должно быть составлено согласно правилам образования имени
программы. Первые восемь литер имени используются в качестве идеи- '
тифицирующего имени.
Фраза ПОДАВЛЯЯ позволяет запретить распечатку вставляемого
из библиотеки текста. Если фраза ПОДАВЛЯЯ не указана, текст,
включаемый оператором КОПИРОВАТЬ в исходную программу,
будет следовать в распечатке программы за этим оператором, начиная
со следующей строки.
Если используется фраза ЗАМЕНЯЯ, каждое слово копируемого
текста, указанное в формате, заменяется при включении в исходную
программу соответствующим словом, идентификатором или литералом.
Однако в библиотеке текст при этом не изменяется. Слово-1, слово-2
и т. д. могут быть именем данного, именем процедуры, именем условия,
мнемоническим именем или именем файла.
Для вариантов 1, 2, 3, 4, 5 и 9 только сам оператор КОПИРОВАТЬ
заменяется информацией, содержащейся в библиотеке под указанным
именем текста. Эта информация включает предложения или фразы,
необходимые для завершения параграфа, предложения или статьи,
содержащей оператор КОПИРОВАТЬ.
Для вариантов 6, 7 и 8 вся статья заменяется информацией, содер-
жащейся в библиотеке под указанным именем-текста. Исключение
представляет случай, когда перед оператором КОПИРОВАТЬ указано
имя-данного. Это имя заменяет соответствующее имя данного из биб-
лиотеки.
Пусть, например, под именем vedomost в библиотеке содержится
следующее описание записи:
01 al.
02 61 Ш 399.
02 в1 Ш 39(5)Т99.
02 г1 Ш 39999 ПОВТОРЯЕТСЯ ОТ 1 ДО 12 РАЗ
В ЗАВИСИМОСТИ ОТ 61.
После обработки оператора
01 платежная-ведомость КОПИРОВАТЬ vedomost
ЗАМЕНЯЯ 61 НА текущнй-месяц, в1 НА зарплата.
статья в исходной программе будет выглядеть следующим об-
разом:
01 платежная-ведомость.
02 текущий-месяц Ш 399.
02 зарплата Ш 39(5)Т99.
02 г1 Ш 39999 ПОВТОРЯЕТСЯ ОТ 1 ДО 12 РАЗ
j В ЗАВИСИМОСТИ ОТ текущий-месяц.
Указанные изменения производятся только в данной программе,
статья же в библиотеке не изменяется. Когда текст копируется из
библиотеки, трансляция выполняется так же, как если бы текст был
частью исходной программы. Сам текст, включаемый в программу
242.
по оператору КОПИРОВАТЬ, не должен содержать операторов КО-
ПИРОВАТЬ.
В строке исходной программы после точки, завершающей оператор
КОПИРОВАТЬ, не должно быть никакой информации.
12.4. ОПЕРАТОРЫ ОСНОВА, ВСТАВИТЬ И УДАЛИТЬ
Операторы ОСНОВА, ВСТАВИТЬ и УДАЛИТЬ предназначены
для включения в трансляцию текста, который представляет собой
целую программу, и корректировки его, если необходимо. Эти опера-
торы относятся к специальному типу операторов управления трансля-
цией, не принадлежащих унифицированному Коболу. ~
Оператор ОСНОВА используется для извлечения из библиотеки
текста, представляющего собой целую программу на Коболе.
Формат:
ОСНОВА имя-текста
Имя-текста — это имя, под которым программа содержится в биб-
лиотеке. Оно должно соответствовать* правилам образования имени
программы.
Оператор ВСТАВИТЬ используется для вставки строк в программу,
которая извлекается из библиотеки по оператору ОСНОВА.
Формат:
ВСТАВИТЬ целое-1
Целое-1 представляет собой номер следования строки исходной
программы, т. е. тот номер, который записывается программистом
в колонках 1 —6 строки бланка кодирования. Этот номер еледования
определяет строку исходной программы в библиотечном тексте, после
которой требуется вставить дополнительные строки. Вставляемые стро-
ки должны следовать за оператором ВСТАВИТЬ.
Оператор УДАЛИТЬ используется для удаления етрок из текста,
извлекаемого из библиотеки по оператору ОСНОВА.
Формат:
УДАЛИТЬ целое-1 [-целое-2] [, целое-3 [-целое-4]] ...
Все целые должны представлять номера еледования строк исход-
ной программы в библиотечном тексте. Если в операторе указано толь-
ко целое-1 (целое-3), будет удалена одна строка с номером следо-
вания, равным целому-1 (целому-3). Если в операторе указано и це-
лое-2 (целое-4), будет удалена последовательность строк, начиная со
строки с номером целое-1 (целое-3) и кончая строкой в номером це-
лое-2 (целое-4).
Начало и конец диапазона удаляемых строк разделяются о помо-
щью дефиса. Запятая обязательно должна использоваться в операторе
для разделения отдельных номеров и(или) диапазонов номеров. За
запятой должен следовать пробел. " ’ ~
243
Пример.
УДАЛИТЬ 001001 — 001005, 001010, 003019 — 003030
За оператором УДАЛИТЬ могут следовать строки для замены уда-
ляемых. Количественного соответствия между удаляемыми строками
и fix заменяющими не требуется.
Операторы ВСТАВИТЬ и- УДАЛИТЬ могут следовать только за
оператором ОСНОВА и модифицируют извлекаемый из библиотеки
текст. Номера следования, указанные в операторах ВСТАВИТЬ
и УДАЛИТЬ, должны представлять возрастающую последовательность
Как внутри отдельных операторов, так и во всей совокупности опера-
торов ВСТАВИТЬ и УДАЛИТЬ, следующих за оператором ОСНОВА.
С помощью операторов ВСТАВИТЬ и УДАЛИТЬ исходная про-
грамма изменяется только на время трансляции. Текст в библиотеке
остается неизменным.
Для того чтобы изменить текст в библиотеке исходных текстов,
следует воспользоваться функцией обновления программы MAINT
в ДОС ЕС или программы IEBUPDTE в ОС ЕС. Скорректировать текст
можно только в том случае, если книга (раздел) в библиотеке пронуме-
рована. В ДОС ЕС местоположение и длина поля нумерации фикси-
рованы (позиции 73 — 80 записи). В ОС ЕС поле нумерации может рас-
полагаться в любом месте записи и занимать от одной до восьми по-
зиций (начало и длина поля нумерации определяются управляющими
операторами программы IEBUPDTE при каждом выполнении програм-
мы). Это позволяет программисту Кобола в’ ОС ЕС использовать поле
номера следования при обслуживании библиотек исходных текстов,
что невозможно в ДОС ЕС.
Скорректированный текст помещается в доступную для записи
область библиотеки и имеет то же имя, которое он имел до обновле-
ния. Старый текст удаляется или может быть сохранен в библиотеке
под новым именем в ДОС ЕС или альтернативным именем в ОС ЕС.
13. ОТЛАДКА
Специальные средства отладки упрощают и ускоряют процесс вы-
явления ошибок в программе. Таким средством в Коболе ЕС ЭВМ
является язык отладки и так называемые отладочные пакеты.
Язык отладки представляет собой набор операторов, обеспечиваю-
щих выполнение наиболее часто используемых отладочных функций,
таких, например, как слежение за последовательностью выполнения
процедур (трассировка переходов), вывод промежуточных значений
данных и т. дг Операторы языка отладки могут появиться в любом
месте раздела процедур исходной программы.
Отладочный пакет представляет собой набор процедур, которые
необходимо выполнить в определенном месте программы. Отладочный
пакет присоединяется к программе во время трансляции и может со-
стоять из любых процедурных операторов языка Кобол и (или) one-.
244
раторов языка отладки. Использование отладочного пакета удобно
тем, что отладочный пакет является как бы «пристройкой» к исходной
программе, которая в любой момент может быть расширена, уменьшена
или вовсе удалена, нисколько не повредив при этом «основного зда-
ния» программы.
13.1. ЯЗЫК ОТЛАДКИ
К операторам языка отладки относятся операторы ВКЛЮЧИТЬ
(ОТКЛЮЧИТЬ) СЛЕЖЕНИЕ, ПЕЧАТАТЬ и ПРИ. Эти операторы
могут появиться в любом месте раздела процедур исходной программы,
а также в отладочном пакете. Они могут использоваться для целей
отладки как отдельно, так и в сочетании с другими операторами Ко-
бола. Результат действия операторов ВКЛЮЧИТЬ СЛЕЖЕНИЕ
и ПЕЧАТАТЬ выводится на системное логическое устройство вывода
(SYSLST в ДОС ЕС, SYSOUT в ОС ЕС).
13.1.1. Оператор ВКЛЮЧИТЬ (ОТКЛЮЧИТЬ) СЛЕЖЕНИЕ
Оператор СЛЕЖЕНИЕ позволяет в рабочее время проследить
последовательность выполнения процедур в программе.
Формат:
включить
отключить
СЛЕЖЕНИЕ
Оператор ВКЛЮЧИТЬ СЛЕЖЕНИЕ активизирует вывод сгене-
рированных транслятором номеров строк исходной программы, со-
держащих имена параграфов или секций. Вывод номера строки осу-
ществляется всякий раз, когда начинается выполнение соответствую-
щего параграфа или секции. Номера строк распечатываются в виде
списка.
Оператор ОТКЛЮЧИТЬ СЛЕЖЕНИЕ отменяет действие опе-
ратора ВКЛЮЧИТЬ СЛЕЖЕНИЕ.
Сочетание операторов ВКЛЮЧИТЬ СЛЕЖЕНИЕ и ОТКЛЮЧИТЬ
СЛЕЖЕНИЕ полезно использовать при отладке участков программы^
где трудно проследить последовательность передач управления, на-
пример когда программа содержит ряд операторов ВЫПОЛНИТЬ^
вложенных условных операторов и т. д.
13.1.2. Оператор ПЕЧАТАТЬ
Оператор ПЕЧАТАТЬ предназначен для вывода в определенном,
формате перечисленных в нем идентификаторов, их значений и нечис-
ловых литералЪв.
245-
Формат:
ПЕЧАТАТЬ
С ИМЕНЕМ
ИЗМЕНЕННЫЙ С ИМЕНЕМ
ИЗМЕНЕННЫЙ
идентификатор-1
нечисловой-литерал-1
идентификатор-2
нечисловой-литерал-2
На месте идентификатора может быть указан специальный регистр
СЧЕТЧИК.
Правила формирования выводной строки аналогичны правилам
дЛя оператора ВЫДАТЬ с той лишь разницей, что между операндами
при выводе обеспечивается пробел. Подразумевается, что максималь-
ный размер логической записи равен 120 литерам. Указанные в опе-
раторе нечисловые литералы выводятся при каждом выполнении
оператора без кавычек и с пробелом после последней литеры.
Если указана фраза С ИМЕНЕМ, каждый названный в операторе
идентификатор выводится в следующем формате: сам идентификатор,
включая уточнители, если они были указаны (не более 120 литер),
пробел, литера «—» (равно), пробел, значение идентификатора (дли-
ной не более 256 байт), пробел. Например, в результате выполнения
оператора
ПЕЧАТАТЬ С ИМЕНЕМ '•••', город, время-полета, стоим-билета
может быть выведена следующая строка:
*** ГОРОД = СОЧИ ВРЕМЯ-ПОЛЕТА = 125 СТОИМ-БИЛЕТА =031.00
Действие фразы ИЗМЕНЕННЫЙ С ИМЕНЕМ подобно действию
фразы С ИМЕНЕМ с той лишь разницей, что, начиная со второго вы-
полнения оператора, выводятся только те идентификаторы, значения
которых изменились ео времени предыдущего выполнения этого опе-
ратора. Например, для первых трех выполнений оператора:
ПЕЧАТАТЬ ИЗМЕНЕННЫЙ G ИМЕНЕМ цех, фамилия, должность
вывод может быть следующим:
ЦЕХ = 11 ФАМИЛИЯ = ИВАНОВ И. А. ДОЛЖНОСТЬ = МЕХАНИК
ФАМИЛИЯ = СТЕПАНОВ В. М. ДОЛЖНОСТЬ = РАБОЧИЙ
ЦЕХ = 12 ФАМИЛИЯ = СЕРОВ П. К.
Если ни один из идентификаторов не изменил значения, никакие,
пустые строки не выводятся.
Фраза ИЗМЕНЕННЫЙ позволяет выводить только значения ука-
занных в операторе идентификаторов и только в том случае, если
эти значения изменились со времени предыдущего выполнения опе-
ратора. При первом выполнении оператора выводятся значения всех
идентификаторов.
Так как значения выводятся без предшествующих им идентифи-
каторов, вывод форматизован: каждый операнд начинается в фикси-
246
рованной позиции строки. Операнды расположены в том порядке,
в каком они перечислены в операторе. Если со времени предыдущего
выполнения оператора значение операнда не изменилось, позиции,
зарезервированные для него в строке, заполняются пробелами. Если
ни один из операндов не изменил своего значения, будет выведена
пустая строка.
На операнды накладываются следующие ограничения: •
а) в качестве операндов не должны использоваться идентификаторы
данных переменной длины;
б) память, отводимая для хранения операнда, не превышает 25G
байт.
Пример. Пусть программа содержит вледующий оператор:
ПЕЧАТАТЬ ИЗМЕНЕННЫЙ дата, таб-номер, колич-часов
Вывод для этого оператора может быть следующим:
10/08/76 1411 8—00
2310 6—30
4793 5018 8—00
11/08/76 1411 2310
4793 5018 4—00
12/08/76 1411 8—00
Первый столбец содержит календарную дату, второй —- табель
ный номер сотрудника, а третий — количество отработанного времени
Общая длина всех операндов для всех операторов ПЕЧАТАТЬ
ИЗМЕНЕННЫЙ С ИМЕНЕМ и ПЕЧАТАТЬ ИЗМЕНЕННЫЙ не
может превышать 32 767 байт.
Если для отладки одной программы используется несколько one
раторов ПЕЧАТАТЬ ИЗМЕНЕННЫЙ С ИМЕНЕМ и (или) ПЕЧА-
ТАТЬ ИЗМЕНЕННЫЙ, содержащих одинаковые идентификаторы,
значения идентификаторов, запоминаемые для сравнения, связываются
с каждым из этих операторов и могут отличаться для операторов, на
ходящихся на различных логических путях выполнения программы.
13.1.3. Оператор ПРИ
Оператор ПРЙ позволяет программисту фиксировать определенные
моменты выполнения программы и указать операторы, которые долж-
ны быть выполнены в эти моменты.
Формат:
ПРИ целое-1 [И КАЖДЫЕ целое-2] [ДО целое-3]
{повелительный-оператор ) (оператор 1
I ИНАЧЕ 1 >
СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ)------------- [СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ)
247
Фраза ИНАЧЕ СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ, за которой
следует точка, может быть опущена.
Оператор ПРИ является условным оператором и, следовательно,
должен быть последним оператором в предложении.
Все целые в операторе должны быть положительными и меньше,
чем 16 777 215.
Каждому оператору ПРИ соответствует сгенерированный трансля-
тором счетчик. В начале выполнения рабочей программы он устанав-
ливается в нуль. Каждый раз, когда управление достигает оператора
ПРИ, значение счетчика увеличивается на 1. Если при этом справед-
ливо следующее условие:
счетчик = целое-1 + (К * целое-2) И < целое-3 (где К = 0, 1, 2, ...)
выполняется повелительный-оператор (или следующее предложение).
В противном случае выполняются операторы, следующие за ИНАЧЕ
(или следующее предложение). Если фраза ИНАЧЕ опущена, выпол-
няется следующее предложение.
Если целое-2 не задано, подразумевается, что целое-2 имеет зна-
чение 1. Если целое-3 не задано, никакого верхнего предела для него
не подразумевается. Если не указано ни целое-2, ни целое-3, повели-
тельный оператор выполняется только один раз — когда значение счет-
чика равно целому-1.
В приводимом ниже примере с помощью оператора ПРИ для каж-
дой десятой обрабатываемой записи будут выводиться контрольные
данные для отладки.
ВЫЧИСЛИТЬ зарплата = час-плата * (кол-чаёов + 1.5 » сверхур).
ПРИ 10 И КАЖДЫЕ 10 ВЫДАТЬ таб-ном, зарплата.
13.2. ОТЛАДОЧНЫЙ ПАКЕТ
Операторы, предназначенные для отладки определенного пара-
графа или секции раздела процедур, могут быть объединены в отла-
дочный пакет. Эти операторы будут транслироваться вместе с про-
граммой на исходном языке, и транслятор обеспечит их выполнение
в нужном месте программы в рабочее время. Все отладочные пакеты,
относящиеся к одной программе, собираются вместе и помещаются
непосредственно за исходной программой.
Каждый отладочный пакет должен быть озаглавлен специальным
оператором управления трансляцией ОТЛАДКА.
Формат: #
ОТЛАДКА имя-процедуры
Оператор ОТЛАДКА записывается по правилам для операторов
управления трансляцией специального типа. В строке, содержащей
оператор ОТЛАДКА, не должно быть никакой другой информации._
Имя-процедуры представляет имя секции или имя параграфа
(уточненное, если необходимо) и определяет точку программы' в ко-
торой должны выполняться операторы из отладочного пакета. Опе-
248
раторы пакета выполняются так,, как евли бы дай были фнаичеекя
пометены в неходкую программу вслёд за указанным именем* секция
ш ишем параграфа, но перед первым оператором этой секции ила
параграфа, в каждой процедурой может быть «вязано не более одного
отладочного пакета. Имя-процедуры не может быть именем параграфа
внутри отладочного пакета.
Отладочный пакет может состоять на любых операторов Кобола
(в том чивле операторов языка отладки). При этом необходимо учиты-
вать следующее:
а) операторы ВЫПОЛНИТЬ и ИЗМЕНИТЬ, используемые в от-
ладочном пакете, могут обращаться к имени процедурыв другом отла-
дочном пакете или в основной части раздела процедур;
б) оператор ПЕРЕЙТИ в отладочном пакете не может обращаться
к имени процедуры в другом отладочном пакете, но может обращаться
к имени процедуры в основной части раздела процедур.
Отладочные пакеты могут использоваться и при отладке програм-
мы, находящейся в библиотеке исходных текстов. В этом «лучае от-
ладочные пакеты размещаются в задании на трансляцию вслед за опе-
ратором ОСНОВА и связанными в .ним операторами ВСТАВИТЬ
и УДАЛИТЬ. .
9 Зак. 73
ВВОДКА
В этом приложения одной звездочкой (*) помечены фордов, типам lyiieii
Русский вариант
РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА, имя-программы. f
[АВТОР. [стагья-кемментарвй] . . .]
[ПРЕДПРИЯТИЕ, [етатья-иомменаарий] . , .]
[ДАТА-НАПИНАНИЯ. Таимьяжаммежиарий]. - - •]
[ДАТА-ТРАНСЛЯЦИЯ, (отаяья-кемментарнй]. . .]
[ПОЛНОМОЧИЯ. [ататья.кеммеитарнй], . ,]
РАЗДЕЛ ОБОРУДОВАНИЯ.
СЕКЦИЯ КОНФИГУРАЦИИ.
ИСХОДНАЯ-МАШИНА, имя-машинн.
РАБОЧАЯ-МАШИНА, имя-машина
[, размер памяти целое
«ЛОВ
ЛИТЕР
МОДУЛЕЙ
[, ГРАНИЦА СЕГМЕНТОВ вомер-еегмента]
[, ПРОГРАММНЫЙ АЛФАВИТ имя-алфавита].
•СПЕЦИАЛоНЫЕ-ИМЕНА. < (имя'реализации"^, 1 EGTb мнеменнческее-нми]
: (литерал-I J
мнемоиическое-им я]
[ими-реализацни-2
|ВКЛ
{включено
ВЫКЛ
ВЫКЛЮЧЕНО
гВЫКЛ
нмя-условия-1 [, ВЫКЛЮЧЕНО, нмя-уелевня-2]
ими-условия-2 [, ‘ ВКЛ ВКЛЮЧЕНО нмн-у<иювин-1)
ВНУТРЕННИЙ
[, имя-алфавита ]6[1ЕЦИАЛЬНЫЙ }]
[, ВАЛЮТНЫЙ ЗНАК литерал-2]
[, ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ].
СПЕЦИАЛЬНЫЕ-ИМЕНА. [/И“Я*₽еаЛИЗацНИ| ЕСТЬ мнемоническое -ими] .
[литерал-1 J -----
[ВНУТРЕННИЙ 1
I* нми-алфавита ^СПЕЦИАЛЬНЫЙ f J
' Ь ВАЛЮТНЫЙ ЗНАК литерал-2]
[, ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ].
250
ПРИЛОЖЕ.НИВ |
ФОРМАТОВ
только в ДОС ЕС, а двумя звездочками (**) — только в ОС ЕС.
Английский варнаки
IDENTIFlflATION DIVISION.
PROGRAM-ID. ими-проараммж.
(AUTHOR, [отатья-камментарий] • • . ]
[INSTALLATION, [статья-комментарий] . . .]
[DATE-WRITTEN, [статья-комментарий] . . .]
[DATE-GOMPILED. [ататьи-комментарий] . . .]
{SECURITY, [статья, комментарий] . . .)
ENVIRONMENT DIVISION.'
CONFIGURATION SECTION.
SOURGE-SOMPUTER. имя-машиня.
OB JEST-COMPUTER. имя-машины
(WORDS
[, MEMORY SIZE целое J (CHARACTERS
MODULES
[, SEGMENT-LIMIT IS номер.сегмента].
• Ат. ‘ , (имя.реализации. 1 ] „
• SPECIAL-NAMES. [{ I IS маеиоаннеское-имн]
• r 1 ntrrpnan.l 1
литерал-1
[имя-реализации.2 [IS миемоннческое.ими]
ON STATUS IS ямя.увловия-l [, OFF STATUS IS ямя-узяввня-2]
OFF STATUS IS нмя-условии.2 [, ON STATUS IS имя-условкя-1]
{, CURRENCY SIGN IS литерал.2]
, [, DECIMAL-POINT IS COMMA],
•SPECIAL-NAMES. I /имя*РеалазаЧии 1 js мнемонячеокее-ими] • •
[литерал. 1 J
9*
[. CURRENCY SIGN IS литерал-2]
I' DECIMAL-POINT IS COMMA].
251
Русоквй варвавт
СЕКЦИЯ ВВОДА-ВЫВОДА.
УПРАВЛЕНИЕ-ФАЙЛАМИ. {ДЛЯ [НЕОБЯЗАТЕЛЬНОГО ] вмв-файла
НАЗНАЧИТЬ [целое] вмя-реалиаацив-1 [, вмя*реалвзацвв«2] ...
[, РЕЗЕРВИРОВАТЬ | НЙ°ОДНОЙ } ДОПОЛНИТЕЛЬНЫХ ОБЛАСТЕЙ]
( ПОСЛЕДОВАТЕЛЬНЫЙ [
(. ДОСТУП J I]
{произвольный J
[, ФАКТИЧЕСКИЙ КЛЮЧ вмя-даввого]
[, КЛЮЧ ЗАПИСИ вмя-даввого]
[, НОМИНАЛЬНЫЙ КЛЮЧ вмя-даввого]
»[, ОБЛАСТЬ ДОРОЖКИ^целое ЛИТЕР]
••[, ОБЛАСТЬ ДОРОЖКИ J «“«-даявого 1
| целое J
••[, ГРАНИЦА ДОРОЖЕК целее]. } . . .
УПРАВЛЕНИЕ-ФАЙЛАМИ. {ДЛЯ имя-файла НАЗНАЧИТЬ имя-реалмащиМ
[, ммя-реализацив-2]
УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ.
[ПЕРЕПРОГОН НА ами-реалиаации [КАЖДЫЕ целое ЗАПИСЕЙ вмя-файла]
[ЗАПИСИ ]
-------- I имя-файла.1 (, имя-файла-2 ).».]••«
СОРТИРОВКИ J . V » J
[НА ОДНОЙ КАТУШКЕ вмя-файла-1 [ПОЗИЦИЯ целое.»
[, вмя-файла-2 [ПОЗИЦИЯ целое-2]] ...]...
[ПРИМЕНИТЬ ОСОБОЕ-ПИСАТЬ К имя-файла. 1 [, вмя-файла-2] . . .]
«[ПРИМЕНИТЬ РАСШИРЕННЫЙ-ПОИСК К имя-файла-1 [, ими-файла-2] « , .]
♦[ПРИМЕНИ IЬ ПИСАТЬ-С-КОНТРОЛЕМ К вмв-файла-1 [, имя-файла. 2] . . .]
•[ПРИМЕНИТЬ ПЕРЕПОЛНЕНИЕ-ЦИЛ целое ДОРОЖЕК К имя.файла-1
[, вмя-файла-2] . . .]
{ГЛАВНЫЙ-ИНДЕКС)
| НА имя-реалнзации к имя-файла-1
ИНДЕКС-ЦИЛ j
[, вмя-файла-2] . . .]
•[ПРИМЕНИТЬ ПАМЯТЬ-ИНДЕКСУ В вмя-даввого К ими-файла-Т
{, вмв-файла-2] . . .]
•♦[ПРИМЕНИТЬ ПАМЯТЬ-ИН ДЕКСУ К ими-файла-! [, вмв-файла-2] . ..]
•♦[ПРИМЕНИТЬ ПЕРЕХОДЯЩУЮ-ЗАПИСЬ К ими-файла-1 (, вмв.файла-2] > • .]
«♦[ПРИМЕНИТЬ КРИТЕРИЙ-РЕОРГ В вми-данвого ДЛЯ вма-файла].
252
. Продолжен^
Аиглийеиай вариант
INPUT-OUTPUT SECTION.
FILE-CONTROL. {SELECT {OPTIONAL] «•файла
ASSIGN TO[ целое] имя-реализации-1 (, мя-реализаццц*2] , , .
[, RESERVE f — I ALTERNATE [^5* 1
-------- I целое f --------- [AREAS]
{SEQUENTIAL)
I]
RANDOM J
. [» ACTUAL KEY -IS ими-данного]
[, RECORD KEY IS имя-данного]
[. NOMIN AL KEY IS иия-даннего]
«[, TRACK-AREA IS целое CHARACTERS]
«*[. TRACK-AREA IS fe“a'A“Hor»| CHARACTERS]
" [целое J
•*[, TRACK-LIMIT IS целое |’TRAaK ]j. у . . .
------------ [TRACKS] ' -
FILE-CONTROL- {SELECT имя-файла ASSIGN TO имя-реализации-1
[, имя-реализацни-2] . . .J.
I-O-CONTROL.
[RERUN ON им я-реализации [EVERY целое RECORDS]] OF имя-файла]
[RECORD 1
------- AREA FOR имя-файла-1 (. имя-файла-2)
SORT J 1 1
[MULTIPLE FILE TAPE CONTAINS нмя-файла-I [POSITION целое-1]
G имя-файла-2 [POSITION целое-2]] ...]...
[APPLY WRITE-ONLY ON имя-файла-1 [,имя-файла-2] . . .]:
«[APPLY EXTENDED-SEARCH ON имя-файла-1 [,нмя-файла-2] . . .]
«[APPLY WRITE-VERIFY ON ямя-файла-1 [,нмя.файла-2] . . .'
«[APPLY CYL-OVERFLOW OF целое TRACKS ON имя-файла-1
(, имя-файла-2] . . .]
(MASTER-INDEX 3
*1 APPLY J ' ’ I TO имя-реализации ON имя-файла-1
| CYL-INDEX J
[, имя-файла-2] . . .]
• [APPLY CORE-INDEX TO имя-данного ON имя-файла-1
(, имя-файла-2] . . .]
«♦[APPLY CORE-INDEX ON имя-файла-l [,имя-файла-2] . . .]
««[APPLY RECORD-OVERFLOW ON имя-файла-1 [, имя-файла-2] . . .]
««[APPLY REORG-CRITERIA TO имя-данного ON имя-файла].
253
Русский вариант
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ ФАЙЛОВ.
ОФ вмя-файла
[В БЛОКЕ [ОТ целое-1 ДО] целое-2 /--*ПИ(¥Д 1 .
1-------- ------------- [ЛИТЕР )
[В ЗАПИСИ [ОТ целое-1 ДО] целое-2 ЛИТЕР]
|ЗАПИСИ ДАННЫХ вмя-данного-I [,вмя-данного-2] . • .]
{ЗНАЧЕНИЕ] I вмя-данного-1
f слово-1 {
ЗНАЧ J • [литерал-1
(имя-дацного-2]
_ „ }]...]•
литерал-2 J
СТАНДАРТНЫ
* МЕТКИ
ОПУЩЕНЫ
вмя-данного-1 [, имя-даиного-2] . . .
ОПУЩЕНЫ
»» МЕТКИ
СТАНДАРТНЫ
имя-данного-1 L имя-данного-2] . . . [ОБЛАСТЬ СЧЕТА вмя-давного-3
ОБЛАСТЬ СОХРАНЕНИЯ имя-данного-4j
{ОТЧЕТ. 1
? имя-отчета-1 [. имя-отчета-2] . , J
ОТЧЕТЫJ
[МЕТОД ЗАПИСИ имя-реализации].
ОС имя-сортвруемого-файла
[В ЗАПИСИ [ОТ целое-1 ДО] целое-2 ЛИТЕР]
[ЗАПИСИ ДАННЫХ имя-данного-1 [, нмя-данного-2] . . ,]|
[МЕТОД ЗАПИСИ вмя-реалвзацив].
номер уровня
вмя-данного
ЗАП
ЗАПОЛНИТЕЛЬ
[ПЕРЕОПРЕДЕЛЯЕТ вмя-данного]
[ПРОБЕЛ КОГДА НУЛЬ]
[СДВИНУТО ВПРАВО]
254
Продолжение
Английский вариант
DATA DIVISION.
FILE SECTION.
FD имя.файла
. [BLOCK CONTAINS [целее-1 TO] целое-2 |
[RECORD CONTAINS [целое-1 TO] целее-2 GHARAGTERS]
{RECORD IS ]
/ имя-данного-I [, има.даимого-2
RECORDS AREj
[VALUE OF слово-l IS |
------ — (литерал-1 J
имя-данного-2 ]
«LABEL
RECORD IS
STANDARD
«’LABEL
RECORDS ARE
RECORD IS
RECORDS ARE;
OMITTED
имя-данногоИ [, имя-даиноги.2]
OMITTED
STANDARD
нмя-данного-1 [, имя.данното-2] . . .[TOTALING AREA jg
имя-данного-3 TOTALED AREA IS имя-данного. 4]
{REPORT IS ]
} имя-отчета-l L нмя-отчета-2] « . .]
REPORTS AREj
[RECORDING MODE IS имя-реализацнн].
SD имя-сортируемого-файла
[RECORD CONTAINS [целое-1 TO] целое-2 CHARACTERS]
RECORD IS
[DATA J 1 имя-данного-l L идя-данного-2]
(RECORDS are)
[RECORDING MODE IS имя-реализации].
имя-данного'
номер-уровия
FILLER
[REDEFINES имя-данного]
[BLANK WHEN ZERO]
{JUSTIFIED]
> RIGHT]
JUST J
268
' Тушка* вариант
|ПОВТОРЯЕТСЯ [ОТ целое-1 ДО] целое-9
[В ЗАВИСИМОСТИ ОТ имя-даввого-1]
{ВОЗРАСТАНИЮ]
} КЛЮЧА аыя*даяйом*2 (, па*лааВОГО-З]
УБЫВАНИЮ j J
[ИНДЕКСИРУЕТСЯ амя-ивдекаа*1 [, имя-мвдекеа-2] •
[ШАБЛОН]
К ? строка-литер]
[ВЛЕВО 1
------- к
ВПРАВО Р
{ВЫЧИСЛЕНИЙ]
ВЫЧ J
(ВЫЧИСЛЕНИЙ-1
|ВЫЧ-1
(вычиелЕНИй-а
ВЫЧ-2
[ВЫЧИСЛЕНИЙ-3
[ВЫЧ-3
ВЫДАЧИ
ИНДЕКСА
(ЗНАЧЕНИЕ!
ЗНАЧ J Ш,”₽аЛ]-
66 вмя-даииого-1 ПЕРЕИМЕНОВЫВАЕТ амя-даавоао-9
- [ПО имя-давиого-8}.
88 шя-условая
ЗНАЧЕНИЕ]
} литерал. 1 [ПО оперяла
ЗНАЧ J
L литерал-3 [ПО литерал**]] . . ..
8ИЩИЯ РАБОЧЕЙ-ПАМЯТИ.
СЕКЦИЯ СВЯЗИ.
СЕКЦИЯ ОТЧЕТОВ.
ОО имя-отчета
[6 КОДОМ ииемовяческое-амв]
Й6
Продолжены»
Ац»ди*екв* варваи
[OCCURS [целое-1 ТО] целое-3 TIMES
[DEPENDING ON вмв-даввого-1]
[ASCENDING ]
К ? KEY IS вмя-даввого-3 (, жмя-давм
[DESCENDING]
[INDEXED BY имя-ввдекса-1 [вмя-ввдекса-2] 1^ , .]]
[PICTURE ]
И } IS строка-литер]
[PIG J
[SYNCHRONIZED ] [LEFT 1
[SYNtj ) IwOHtI1
{COMPUTATIONAL ]
COMP J
{COMPUTATIONAL-1
COMP-1
{COMPUTATIONAL-3'
еомр-з
[COMPUTATIONAL-3
|cOMP-3
DISPLAY
INDEX
[VALUE IS литерал].
66 имя-данного-1 RENAMES имя-данного-2
[THRU вмя-даиного-3].
88 вмя-условвя
(VALUE IS
литерал-1 [THRU литерал-2]
[VALUES ARE]
[, литерал-8 [THRU литерал-4]] • . ..
WORKING-STORAGE SECTION.
LINKAGE SECTION.
REPORT SECTION.
RD вмя-отчета
[WITH CODE мнемоническое-имя]
257
Русский варкой
[КОНЦУ
| УПРАВЛЕНИЕ ПО <идентификатор-1 [, идеятяфикитор-й] ...
[КОНЦУ, идентификатор-1 [, идентификатор-2] ,
[РАЗМЕР СТРАНИЦЫ целое. 1 СТРОК
L ЗАГОЛОВОК целое-2]
[, ПЕРВЫЙ ФРАГМЕНТ целое-3J (, ПОСЛЕДНИЙ ФРАГМЕНТ целее-4]
Ь КОНЦОВКА целое-6]].
М [жми-данного]
ЗАГОЛОВОК ОТЧЕТА
30
ЗАГОЛОВОК СТРАНИЦЫ'
3G
УПРАВЛЯЕМЫЙ
УЗ
ЗАГОЛОВОК) [идаитифиивор-11
1 55 }
J [КОНЦУ J
ТИП
ФРАГМЕНТ
ФР
УПРАВЛЯЕМАЯ
УК
гКОНЦОВКА
кс
КОНЦОВКА
КО
СТРАНИЦЫ-
ОТЧЕТА]
[НОМЕР СТРОКИ
целое-1 [НА СЛЕДУЮЩЕЙ СТРАНИЦЕ]
ПЛЮС целое-2
НА СЛЕДУЮЩЕЙ СТРАНИЦЕ
[СЛЕДУЮЩАЯ ГРУППА
целое-I
ПЛЮС целое-2
НА СЛЕДУЮЩЕЙ СТРАН
[ДЛЯ ВЫДАЧИ].
иомер-уровня [им и-данного]
[ПРОБЕЛ КОГДА НУЛЬ]
[НОМЕР СТОЛБЦА целое]
[ОПРЕДЕЛЯЕТ ГРУППУ]
Английский вариант
iNTROL IS
FINAL
, ? 'идентификатор-1 [, идентификатор-2] . . .
[ CONTROLS ARE J [FINAL, идентификатор-1 [, идентификатор-2]
LINE ]
LIMIT IS
LIMITS ARE.
t. HEADING целое-2]
[, FIRST DETAIL целое-3] [, LAST DETAIL целое-4]
[, FOOTING целое-5]].
•1 [иия-даиного]
RH
REPORT HEADI
[PAGE HEADING'
[CONTROL
HEADING’
•идентификатор-1
CH
FINAL
DETAIL
TYPE IS
DE
[CONTROL
FOOTING'
'идентификатор-2
CF'
FINAL
PAGE FOOTING'
PF
RFPORT FOOTING'
целое-1
[LINE NUMBER IS
PLUS целое-2
NEXT PAGE
[NEXT GROUP IS
'целое-1
PLUS целое-2
[next PAGE
[[USAGE IS] DISPLAY],
иомер-уровня [имя-данного]
[BLANK WHEN' ZERO]
[COLUMN NUMBER IS целое]
[GROUP INDICATE]
РуеекиЛ вариант
[СДВИНУТО ВПРАВО]
целое-1 (НА СЛЕДУЮЩЕЙ СТРАНИЦЕ]
[НОМЕР СТРОКИ ПЛЮС целое-2
НА СЛЕДУЮЩЕЙ СТРАНИЦЕ
{ШАБЛОН ] '
} строка-литер!
Ш 1
[ИСТОЧНИК идентификатор]
[СУММА идентификатор-! [, идентификатор-2] , , , [ДЛЯ имя-данного]
{идентификатор-3
КОНЦУ
(ЗНАЧЕНИЕ
(ЗНАЧ
[ДЛЯ ВЫДАЧИ].]
РАЗДЕЛ ПРОЦЕДУР [ИСПОЛЬЗУЯ идентя*икятло-1 идентификатор-2j . , ,j,
ВЕРНУТЬ ЗАПИСЬ нмя-файла (В идентификатор!
В КОНЦЕ повелительный-оператор
ВЕРНУТЬСЯ.
ВКЛЮЧИТЬ СЛЕЖЕНИЕ
ВОЙТИ В нм я-языка [имя-программы].?
ВСТАВИТЬ целое
ВХОД литерал-1 [ИСПОЛЬЗУЯ идентификатор-.! идентификатор- 2]
• -I
ВЫДАТЬ ^литерал-1
(идентификатор-1
[, литерал-2
, идентификатор-2
[НА
CONSOLE
SYSLST
мнемоническое-имя
SYSPCH
SYSPUNCH
CONSOLE
“’ВЫДАТЬ Р1ятеРал’1 1 Г, литерал-2 ] SYSPCH
(идентификатор-1 f [. идентификатор-2] 1— SYSOUT
'мнемоническое-имя
ВЫЗВАТЬ литерал [ИСПОЛЬЗУЯ идентификатор»! [, идентификатор^] , , .]
ВЫЙТИ [ИЗ ПРОГРАММЫ|.
260
Продолжена»
Аяппймжа вм>мп
RIGBT]
целее»1
[LINE NUMBER IS
PLUS aemct ]
NEXT PAGE
IS «пмиыпт»]
[SOURCE вдевтификаввр]
[SUM ндевтвфииаиор.1 [, ждаяввфии»ввр.8] .V, [UPON жжя.яатмгв]
[идеипфвиавжр.В}
[RESET ON J lj]
[FINAL J
[VALUE IS литерал]
[[USAGE IS] DISPLAY!,
PROCEDURE DIVISION [USING жденжификатвр»! [, жммжфивгмрав] . . .].
RETURN имж-файла REGORD [INTO ндевивфжмавжр]
AT END пввелительнвй.вператвр
OOBACK.
READY TRACE
ENTER шя.авяк* * [жмя.пригваимвф
INSERT «слое
ENTRY литерал [USING иденияфииаеир.1 [. жяся*яАяяв«М>«в] • • •]
•DISPLAY /““₽“•> 1 , Г, лвтерал.2 |
• [идентификатор. 1J [, идеяинфикатор-в] * * *
CONSOLE
SYSLST
[UPON . ивемвввчеакое.иия 1
SYSPCH
SYSPUNCH
CONSOLE
«•DISPLAY 1 Г, литерал.2^ 1 , . fUpoN SYSP®1
-------- [идентификатор.!/ [, ндентвфвка»вр-2/ SYSOUT
,шк1мвачемм.жия
CALL «терал [USING идентификатор. 1 [, идеитификатор.2] . • .]
EXIT [PROGRAM}.
Русоков вариант
ВЫПОЛНИТЬ имя-проце дуры-1 [ПО ими-процедуры-2]
ВЫПОЛНИТЬ имя-процедуря 1 [ПО имя-процедуры-2]
идентификатор-11 [РАЗ
целое-1 J [РАЗА
ВЫПОЛНИТ Ь имя-процедура.! [ПО имя-процедуры-2] ДО условие-!
ВЫПОЛНИТЬ имя-процедуры-1 [ПО имя-процедуры-2]
МЕНЯЯ /имя-иидеква-'
(идентификатор* 1
[ЗАТЕМ [имя-индекса-4
1 [ядентификатор-4
имя-индекса-2 1
литерал-2 }
.идентификатор- 2J
литерал-3 ) __ .
r I ДО услооае-1
идентификатор-З] —
Гимя-нндекса-5 '
литерал-5
[идентификагтор-Б
(литерал-6 1 __ „
НА { } ДО условие-2
[идентификатор-б]
, „ . /нмя*индекса«8 1
[ЗАТЕМ (имя-ЧНДекса-Т 1 от 1лвтерал,8
Ьдентифмнсатор-г) (идентификатор-»
НА /лвтеРал“9 1 до условие-3]1
(идентификатор-!)] —
{идентификатор-2
литерал-1
арифметическое-выражение
[ПРИ ПЕРЕПОЛНЕНИИ повелительиый-орерагор]
ГЕНЕРИРОВАТЬ /и“я'Даин0Г0|
------------- (имя-отчета J
ДЕКЛАРАТИВЫ.
{СЕКЦИЯ нмя-еекцни. оператор ИСПОЛЬЗОВАТЬ.
{имя-параграфа, {предложение}
КОНЕЦ ДЕКЛАРАТИВ.
СЕКЦИЯ имя-секции [номер-сегмента].
ЕСЛИ условие /оператор-1
условие {следующее ПРЕДЛОЖЕНИЕ
ИНАЧЕ /опервЮР-2 ]
- - [СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ/
ЗАКОНЧИТЬ имя-отчета-1 [, имя-отчета-2] ...
/КАТУШКУ] ГБЕЗ ПЕРЕМОТКИ
^ЗАКРЫТЬ I I имя-файла-1 I
------ [ТОМ I 1с ЗАМКОМ
/КАТУШКУ
Чтом
мя-файла-2
БЕЗ ПЕРЕМОТКИ
С ЗАМКОМ
Продолжена»
Английский вариант
PERFORM имя-процедуры-1 (THRU нмя-процедуры-2]
PERFORM имя-процедуры-1 [THRU имя-процедуры-2]
идентификатор-1 ]
I TIMES
целое-1 J
PERFORM имя-процедуры-1 [THRU имя-ир«цедурв-2] UNTIL условие-1
PERFORM имя-процедуры-1 [THRU имя-процедуры-2]
, _ , , (имя-индеиеа-2
vanvilur- (имя-ни Декса-1 1 _слы _
VARYING / I гкОМ 1 литерал»2
— ДвдентнфшЛтйр»! f | идентификатор-2
BY (литерал-3 | UNTIL условие-1
— (ндентификаюр-З J —
- , . д. /жми-иидекеа-
[AFTER (иия:ии«ексаи 1 FROM (литерал-6
(идеитификатор-*/ (идеитификатнр-Б
(AFTER
1------ (ндентификатор-Т
(литерал-6 | until уаловие-2
идентификатор-#)
имя-иилекси-В '
литерал-8
1ядентвфииатор-8
BY [литерал-9 t UNTIL условие. ЗЦ
— [идентификатор-91 ------
{идеитификатор-2 1
литерал-1
арифметическое-выражение^
(ON SIZE ERROR повелительный-оператор]
generate
•-------- [имя-отчета j
declaratives.
{имя-секции SECTION, оператор USE.
{имя-пара графа. {предложение} . . .}
END DECLARATIVES.
имя-аекции SECTION [номер-сегмента].
(оператор-1 1
NEXT SENTENCE[
-ер Гоператор-2 »
[NEXT SENTENCE!
TERMINATE имя-отчете-1 [, имя-отчета-2]
[REEL] (NO REWIND]
' I [WITH >]
UNIT j ILOCK j
fREELl (NO REWIND]
unit lW1™ '{lock (H
UNIT! | LOCK I
2»3
Рупкнй вариант
««ЗАКРЫТЬ имя-файла-1
[, имя-файла-2
-БЕЗ ПЕРЕМОТКИ '
С ЗАМКОМ
ДИСПОЗИЦИЯ D1SP
~БЕЗ ПЕРЕМОТКИ Т
С ЗАМКОМ I] . . .
ДИСПОЗИЦИЯ DISP J
[КАТУШКУ] Г— ПЕРЕМОТКИ'
««ЗАКРЫТЬ J--------I имя-файла-1 I С ЗАМКОМ
'£22? J I G УСТАНОВКОЙ
КАТУШКУ]
имя-файла-2
ТОМ
~БЕЗ ПЕРЕМОТКИ~
С ЗАМКОМ
в УСТАНОВКОЙ
ИЗМЕНИТЬ имя-процедуры>1 [ДЛЯ ПЕРЕХОДА] К имя-процедура-2
[имя-процедуры-3 [ДЛЯ ПЕРЕХОДА] К иия-процедуры-4] . . .
ИСКАТЬ В идентификатар-1 (МЕНЯЯ {““•Яндекса-! ]
..... 1 [идеитифнкатор-г/1
[В КОНЦЕ певелительиый-оператор-1]
ИСКАТЬ ОСОБО В идентификатор-1
[Б КОНЦЕ повелительный-оператор-1 ]
irrtrn* а [повелительный-аператор-2 ]
КОГДА уаловие-1 |СЛЕДУЮ1ЦЕЕ ПРЕДЛОЖЕНИЕ! •
ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ
для
имя-файла-1 [, имя-файла- 2] .
ямя-файла-3 ПОЛУЧАЯ имя-даыиого-1 нмя-дашиго-2]
ВХОДНЫХ
ВЫХОДНЫХ
ВХОДНЫХ-ВЫХОДНЫХ , •
[ДО ]
ИСПОЛЬЗОВАТЬ J ' I СТАНДАРТНОЙ ПРОЦЕДУРЫ
I ПОСЛЕ)
'НАЧАЛЬНОЙ
КОНЕЧНОЙ
МЕТКИ
КАТУШКИ-!
ФАЙЛА I ДЛЯ
ТОМА I
имя-файла-1 [, имя-файла-2]
ВХОДНЫХ
ВЫХОДНЫХ
ВХОДНЫХ-ВЫХОДНЫХ
ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ идентификатор
КОПИРОВАТЬ имя-текста [ПОДАВЛЯЯ)
264
Продолжение
Ааглийский нарван>
{NO REWIND]
LOCK И
DISP I
{NO REWIND!
LOGK HJ . . ;
DISP J
[REEL! [NO REWIND
a*CLOSE имя-файла. 1 [ .1 [WITH [LOCK. j
lUNnl [POSITIONING
{REEL! [NO REWIND!
I [WITH 4 LOCK t
UNIT| [ POSITIONING!
ALTER вмя.процедурм*! TO [PROCEED TO] ямя«пр*цедурв*й
[имя-процедурш-3 TO (PROCEED TO] кмя-процеДуры-4] . . ,
SEARCH идеитификатвр-l [VARYING [e“a’™«eitea-1
------- 1-------- (адентификатор-2 J
[AT END повелительный-оператор-1)
> Iповелительиый-вператор-2 ]
WHEN условие-1 [ NEXT SENTENCE f
« (повелительный-операгор-3
[WHS? увловие-2 | NEXT SENTENCE
SEARCH ALL идентификатор- I
[AT END повелительный-оператор* 1]
. [повелительный-оператор-2
WHEN условие-1 |NExT SENTENCE
USE AFTER STANDARD ERROR PROCEDURE
ON
нмя-файла-1
нмя-файла-3
INPUT
OUTPUT
[, вмя-файлэ-2' ’
GIVING имя-данного-! J, ямя-давввго-2]
1.0
[BEFORE^
USE [ I STANDARD
’ (AFTER J
LABEL PROCEDURE ON
"BEGINNING"] rREEL
I I FILE
ending J I unit
ивя-файла-1 [, имя-файла-2] . . .
INPUT
OUTPUT
1-0
USE BEFORE REPORTING идентификатор
COi'Y имя-текста [SUPPRESS]
265
Русский варжант
[ЗАМЕНЯЯ слово-1 НА
слозо-2
идентификатор-1
,литерал-1
(слово-4 1
ндентифнкатор-2 >1 • • •)
литерал-2 J
НАЧАТЬ нмя-отчета-1 [, нмя-отчета-2] . . .
ОБНОВИТЬ имя-записи [ИЗ ПОЛЯ идентификатор'!
ПРИ ОШИБКЕ КЛЮЧА повелительный-vutpа*up
ОСНОВА нмя*текста
ОСТАНОВИТЬ {;йАХЛу}
отключить
СЛЕЖЕНИЯ
Г РЕВЕРСНО
БЕЗ
ПЕРЕМОТКИ
Г РЕВЕРСНО
«ОТКРЫТЬ
[, имя-файла-2
БЕЗ ПЕРЕМОТКИ
ВЫХОДНОЙ имя-файла-3 [БЕЗ ПЕРЕМОТКИ}
[, имя-файла-4 [БЕЗ ПЕРЕМОТКИ}) . . .
ВХОДНОЙ . ВЫХОДНОЙ имя-файла-5 [, имя-файла-6] . . .
'LEAVE
t РЕВЕРСНО
| [ДИСПОЗИЦИЯ J REREAD}]
БЕЗ ПЕРЕМОТКИ | [DISP
••ОТКРЫТЬ
ГРЕВЕРСНО
[, имя-файла-2
ВЕЗ ПЕРЕМОТКИ
LEAVE
[ДИСПОЗИЦИЯ . REREAD 1ц
DISP
[LEAVE У
ВЫХОДНОЙ {имя-файла-3 [БЕЗ ПЕРЕМОТКИ) [ДИСПОЗИЦИя|яЕКЕАр|]}
[DISP I
ВХОДНОЙ-ВЫХОДНОЙ вмя-,файла-4 [, вмя-файла-б] ,
ОТЛАДКА имя-процедуры
ОТНЯТЬ /литерал-1 1 Г,литерал-2 |
“ [идентификатор-1/ [ ,идентификатор-2J " * *
ОТ идеитификатор-m [ОКРУГЛЯЯ) [, идешнфикатор-л [ОКРУГЛЯЯ11
[ПРИ ПЕРЕПОЛНЕНИИ повелительиый-оператор]
ОТНЯТЬ /литерал-1 | Г, литерал-2 1 . от [лнтерал-т
{идентификатор-1/ [, идентификатора] * * [идентификатор-т.
ПОЛУЧАЯ идентификатор-п[ОКРУГЛЯЯ)
[ПРИ ПЕРЕПОЛНЕНИИ вовелвтельвый-оператор]
266
Продолжение
Английский вариант
[слово-2
[REPLACING слово-1 BY < идентификатор-1
(литерал-1
{слово-4 1
идентификатор-2Я • • -1
литерал-2 J
INITIATE иии-отчета-1 [,ния-отчета-2] ...
REWRITE нми-записи [FROM идентификатор]
INVALID KEY повелительный-оператор
BASIS инн»тексп
[литерал]
|RUN /
RESET TRACE
INPUT ння-файла-1
'REVERSED
WITH NO REWIND
«OPEN
Г REVERSED 1
[. ния-файла-2 ^wnH NQ REWIND p * * *
OUTPUT имя-файла-3 [WITH NO REWIND]
[, имя-файла-4 [WITH NO REWIND]] . . J
1-0 ния-файла-5 [t имя-файла-6] ...
' Г REVERSED
INPUT нмн-файла-1 |
----- I WITH NO REWIND.
LEAVE
REREAD
DEP
«OPEN
[„ ния-файла-2
•REVERSED
WITH NO REWIND
LEAVE "I
REREAD I] . . .
DISP J
OUTPUT {нмя-файла-3 [WITH NO REWIND]
LEAVE "I
REREAD 1} . л
DISP J
1-0 нмя-фаЙла-4 [. ния-файла-5] . • •
DEBUG ния-процедурт
SUBTRACT /литерал-! | Г. литерал-2 I . .
--------- (идентификатор-1J [, идентификатор-2J
FROM идентифнкатор-m [ROUNDED] [. ндентяфнквгор-я [ROUNDED]] .
[ON SIZE ERROR, повелительный-оператор]
SUBTRACT (литерал-1 . 1 Г, литерал-2
----------— (идентификатор-1 f L, идентификатор-2.
GIVING идентификатор-п [ROUNDED]
[ON SIZE ERROR повелительный-оператор]
литерал-m
идентификатор-m.
Русский в»ряав«
(СООТВЕТСТВЕННО!
| ндевтвфакааир-1 ОТ адентафакатар-З
еоотв J
[ОКРУГЛЯЯ] [ПРИ ПЕРЕПОЛНЕНИИ певелиельижй-еперааор]
ПЕРЕДАТЬ вмя-ааовсв [ИЗ ПОЛЯ вдевтафакатер]
ПЕРЕЙТИ К [вмв-процедурву,
ПЕРЕЙТи К вмя-прсцедури-1 [, вмя-пр«цедурв«2] • • • в кмя-процедурШ’Д
в зависимости от вдевтвфвкатор
ПЕЧАТАТЬ
С ИМЕНЕМ '
ИЗМЕНЁННЫЙ Я ИМЕНЕМ
ИЗМЕНЕННЫЙ
I в Деитяфиматор-1
нечислмой-автераа-1,
1вДевтвфикатир-2
вечиалеввВ-лвверал -2
ПИСАТЬ вмя-яалвеи [ИЗ ПОЛЯ вдевтвфвка’гер*!] -
[ДО ) (целее СТРОК [
П I ПРОДВИЖЕНИЯ /идевтифвкааор-2 СТРОКИ
[ПОСЛЕ [ (мвеионвчевкое-вмя J
[В- КОНЦЕ СТРАНИЦЫ повелвтелышй-еверакф]
ПИСАТЬ ям я-аа паев [ИЗ. ПОЛЯ идевтвфакатнр-1]
ПОСЛЕ УСТАНОВКИ {целее | СТРОК
—— ---------------- [девсвфвкмор.з;
[В КОНЦЕ СТРАНИЦЫ повелвтежлвА-епераеир]
ПИСАТЬ амя-ааписв [ИЗ ПОЛЯ ядеитифакааор]
ПРИ ОШИБКЕ КЛЮЧА повелжтельвый-еператор
ПОДАВИТЬ ПЕЧАТЬ
ПОДВЕСТИ ЗАПИСЬ имя-файла
ПРИ ОШИБКЕ КЛЮЧА певелвтельввЛ-оператср
ПОМЕСТИТЬ /идентификатор-11 в вдевпфвмая»р*2 [, вдевтвфйиатор.8] ,
'[литерал J ~~
[СООТВЕТСТВЕННО!
ПОМЕСТИТЬ J } вдевтвфикатер-1 В вдеитвфши*ор»3
' ICOOTB I
ПРЕОБРАЗОВАТЬ вдеитифахагор-S ЗАМЕНЯЯ ЛИТЕРЫ
стандартная-конставта-1 1 [ааавмртяая-яонспваа
веавалевеВ-лвпрал-1 > Л* ЛИТЕРЫ <ве<ш<иювов-литерал-2
дотипфакатор-1 J иикнвфвкавораВ
268
Продолжение
Английский вариант
^CORRESPONDING
SUBTRACT J
I CORR
[ROUNDED] [ON SIZE ERROR повелительный-оператор]
RELEASE имя-записи [FROM идентификатор]
GO TO [имя-процедуры]
GO TO имя-процедуры-1 [, имя-процедуры-2] . . имя-процедуры-п
идентификатор-1 FROM идентификатор-2
DEPENDING ON идентификатор
EXHIBIT
NAMED
CHANGED NAMED
CHANGED.
идентификатор - I
нечисловой-литерал-1
[идентификатор-2
нечисловой-литерал-2
WRITE имя-записн [FROM идентификатор-1 ]
[BEFORE] [целое LINES ]
[{ j ADVANCING ^идентификатор-2 LINEsl]
I AFTER J [мнемоническое-имя J
iEND-OF-PAOE]
Z повелительный-оператор]
EOP J
WRITE имя-записи [FROM идентификатор-1]
AFTER POSITIONING /пелое I LINES
lндентификатор-2I
[END-OF-PAGE]
[Al < } повелительный-оператор]
| EOP )
WRITE имя-записи [FROM идентификатор]
INVALID KEY повелительный-оператор
MOVE I TO PRINT-SWITCH
ST ART имя-файла
IN'.' hi ID KFY позелителыТый-опепятор
MOVE J идентификатор-1 I pi идентификатор-2 [, идентификатор-3]
[литерал J -
{’ CORRESPONDING]
( идентификатор-1 TO идентификатор-2
CORR j
TRANSFORM идентификатор-3 CHARACTERS
!стандартная-констаита-1 ) [стандяртная-конетаита-2
нечисловой-литерал -.1 Z Х2 ]нечисловой-литерал-2
[идентификатор-1 ) [идёнтификатор-2
269
Русский вариант
ПРИ целое-1 [И КАЖДЫЕ целое-2] [ДО целое-3]
повелительный-оператор ' 1 индчр [оператор
СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ [ Н [СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ
[SYSIPT
* ПРИНЯТЬ идёитификатор [в /CONSOLE
I мнемоническое- имя
'SYSIN
' * «ПРИНЯТЬ идентификатор [С
CONSOLE
мнемоническое- имя
ПРОГОН СТРАНИЦЫ
ПРОПУСКп (п= 1, 2, 3)
ПРОСМОТРЕТЬ
СЧИТАЯ
идентификатор
ДО ПЕРВОГО
ВСЕ
ВЕДУЩИЕ
литерал-1 [ЗАМЕНЯЯ НА литерал-2]
ВСЕ
ЗАМЕНЯЯ
ВЕДУЩИЕ
ПЕРВЫЙ
ДО ПЕРВОГО
литерал-3 НА литерал-4
РАЗДЕЛИТЬ /идентификатор-11 НА /идентификатор-21
~ (литерал-1 / ’ 1литерал-2 J
ПОЛУЧАЯ идентификатор-3 [ ОКРУГЛЯЯ] [ОСТАТОК идентификатор-4]
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
СЛОЖИТЬ /идентификатор-11 Г идентификатор- 21 . # #
““ I литерал-1 / [литерал-2 J
С идеитификатор-m [ОКРУГЛЯЯ) [идентифнкатор-п [ОКРУГЛЯЯ)) . . а
[ПРИ ПЕРЕПОЛНЕНИИ повелительяый-оператор]
СЛОЖИТЬ /идентификатор-11 /идентификатор-21 Гидентификатор-31
(литерал-1 / (литерал-2 J [.литерал-3. J * *
ПОЛУЧАЯ идеитификатор-m [ОКРУГЛЯЯ)
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
{СООТВЕТСТВЕННО )
J идентификатор-1 С идентификатор-2
СООТВ )
[ОКРУГЛЯЯ) [ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор]
[ВОЗРАСТАНИЮ)
СОРТИРОВАТЬ имя-файла-1 ПО J-------------------1 КЛЮЧА имя-данного-1
------------ — [УБЫВАНИЮ J .
/ ВОЗРАСТ АНИЮ\
[, им я -данного-J2 . . . [ПО I-----------< КЛЮЧА ими-давного-3
‘— [УБЫВАНИЮ j
270
Продолжение
АнглиАокий варит
ON целое-1 [AND EVERY целое-2] [UNTIL целое-3]
{поаелятельный-оператор, (ELSE ] I оператор ]
NEXT SENTENCE / (OTHERWISE/ [NEXT SENTENCE!
[SYS1PI
♦ACCEPT идентификатор [FROM JCONSOLE
(маемоничеокое-имя
[SYSIN
**ABCBPT идентификатор { FROM J CONSOLE
| мнемоническое-имя
EIECT
SKIPn (n=l. 2, 8)
EXAMINE идентификатор
'UNTIL FIRST
TALLYING ALL LEADING литерал-! [REPLACING BY лиоерал-2]
ALL LEADING
REPLAGINO FIRST UNTIL FIRST . литерал-3 BY литерал-4
DIVIDE /идентификатор-11 by /идентификатор-2)
(литерал-! / 1литерал-2 f
GIVING идентификатор-3 [ROUNDED, [REMAINDER идентификатор-*]
]ON SIZE ERROR повелительный-оператор]
ADD /идентификатор-11 Г, идентификатор-21
/литерал-1 / [, литерал-2 J
ТО ндентификатор-т [ROUNDED] [идентификатор-n [ROUNDED]] . .
]ON SIZE ERROR повелительный-оператор]
ADD /Идентификатор-!) /идентифинатор-2) Гндентификатор-31 )1(
(литерал-1 / (литерал-2 J (^литерал-З J
GIVING идентификатор-ти [ROUNDED1]
[ON SIZE ERROR повелительный-оператор]
[CORRESPONDING]
АРР < l идентификатор-! TO ндентификатор-2
(CORR |
[ROUNPED] [ON SIZE ERROR повелительный-оператор]
{ASCENDING \ i
----------- ( KEY имя-данного-1
DESCENDING f
{ASCENPING \
l имя-дакиого-3
DESCENDING /
m
Русский BipifiBl
[, вмя-даИиото-4]
{АЛФАВИТ имя-алфавита)
ПРОЦЕДУРА ВВОДА им я-секция-1 [ПО вмя-секцви-2]
ИСПОЛЬЗУЯ вмя-файла-2 J
ПРОЦЕДУРА ВЫВОДА иыя-секцив-3 [ПО им я-секции-4 J1
ПОЛУЧАЯ имя-файла-4] j
УДАЛИТЬ целое-1 [-целое-2][, целое-3 [-целое-4]} ...
УМНОЖИТЬ /идентификатор-НА идевтифвкатор-2 [ОКРУГЛЯЯ]
[литерал-1 J — '-----------
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор] .
УМНОЖИТЬ (идентификатор-11 нд (идентификатор-21
[литерал-! ) — [литерал-2 J
ПОЛУЧАЯ идентнфвкатор-3 [ОКРУГЛЯЯ]
[ПРИ ПЕРЕПОЛНЕНИЙ! повелительиый-оператор]
Условие класса;
идевтифвкатор |ИЕ]
БУКВЕННОЕ
ЧИСЛОВОЕ
Условие отвошеипя]
(вдевтвфвкатор-1 )
литерал-1 I JHE]
|арифметвческое-ввражевие-1I ~~
{в девтифвиатор-2
литерал-2
арпфыетичесное-вмражепве-2{
Условие знака;
БОЛЬШЕ
МЕНЬШЕ
РАВНО
ПОЛОЖИТЕЛЬНО!
ОТРИЦАТЕЛЬНО
НУЛЬ
/идентификатор 1
[арифметвчесное-выражеиие I I—!
Условие имени-условия и состоянии переключателя;
имя-услоьия
УСТАНОВИТЬ /идентификатор-1
[вми-ии декса-1
(кмя-иидекса-3 1
< идентификатор- 3}
[литерал-1 )
{, идентификатор-2] . , .1
[, вмя-иидеиса-2] ... /
УСТАНОВИТЬ вмя-ивдекса-1 [, ими-иидекеа-2] . .
1ВЫЧИТАЯ J
{идентификатор-11
литерал-1 J
ЧИТАТЬ ЗАПИСЬ имя-файла [В идентификатор]
<В КОНЦЕ . -
(ПРИ ОШИБКЕ КЛЮЧА] повелительный-оператор
27?
Продолжение
Английский вариант
[, имя-данного- 4] . . .]
(INPUT PROCEDURE IS имя-секции-1 (THRU имя-секцив-2]]
USING имя-файла-2 |
{OUTPUT PROCEDURE IS имя-секцни-3 [THRU имя-секции-4 j)
GIVING имя-файла-4 |
DELETE целое* 1 [-целое-2] [, целее-3 [-целое-4]] . . «
MULTIPLY (идентификатор* 11 BY идентификатор.2 (ROUNDED]
——— (литерал-! J 1 ’
[ON SIZE ERROR повелительный-оператор]
MULTIPLY /идентификатор-11 BY /идеитификатор-2|
---------— (литерал-1 / lлитерал-2
GIVING идевтифнкатер-3 [ROUNDED)
[ON SIZE ERROR повелительный-оператор]
Условие класса:
.NUMERIC »
идентификатор IS [NOT] J >
1---' 1 ALPHABETIC f
Условие отношении;
GREATER THAN»
идентификатор -1 Г
[литерал 1 } » [NOT]
арифметическое-выражение- I ]
LESS THAN
EQUAL TO
идентификатор-2
литерал-2
.арифметияеское-выражение-г
Условие знака:
идентификатор 1
арифметическое-выражение,
IS [NOT]
BITIVE 1
iATIVE'
О
Условие имени-условия в состояния переключателя;
имя-условия
SET /идентификатор-1 [, идеитификатер-2] * * .1
[имя-индекса-1 [, имя-индекса-2] ... /
{имя-индекса-3 1
идентификатор- 3 }
литерал-1 )
fUP BY
SET имя-иидекса-1 [, нмя-нидекса-2] * * . <
{идентификатор-11
литерал-I /
READ имя.файла RECORD [INTO идентификатор]
,АТ END »
I ------- I повелительный-оператор
[INVALID KEY/
273
приложение 2
СПИСОК ЗАРЕЗЕРВИРОВАННЫХ СЛОВ
Звездочкой отмечены слова, относящиеся к числу зарезервированных
только для ОС ЕС.
АВТОР ДАННЫХ катушки
АЛФАВИТ ДАТА-НАПИСАНИЯ КАТУШКУ.
БЕЗ ДАТА-ТРАНСЛЯЦИИ ключ
БЛОКЕ ДАТУ КЛЮЧА
БОЛЬШЕ ДЕКЛАРАТИВ КО
БУКВЕННОЕ ДЕКЛАРАТИВЫ КОГДА
В ДЕСЯТИЧНАЯ » КОД-ВОЗВРАТА
ВАЛЮТНЫЙ * ДИСПОЗИЦИЯ » КОД-ВОЗВРАТА-.
ВВОДА ДЛЯ МЕТКИ
ВВОДА-ВЫВОДА ДО КОД-ВОЗВРАТА-.
ВЕДУЩИЕ ДОПОЛНИТЕЛЬНЫХ j 1 СОРТ
ВЕРНУТЬ ДОРОЖЕК кодом
ВЕРНУТЬСЯ ДОРОЖКИ КОНЕЦ
вкл ДОСТУП КОНЕЧНОЙ
ВКЛЮЧЕНО ЕСЛИ КОНЦЕ
включить ЕСТЬ КОНЦОВКА
ВЛЕВО ЗАВИСИМОСТИ КОНЦУ
ВНУТРЕННИЙ ЗАГОЛОВОК КОНФИГУРАЦИИ
ВОЗРАСТАНИЮ « ЗАКОНЧИТЬ КОПИРОВАТЬ
ВОЙТИ ЗАКРЫТЬ * КРИТЕРИЙ-РЕОРЕ
ВПРАВО ЗАМЕНЯЯ КС
ВРЕМЯ ЗАМКОМ ЛИТЕР
ВСЕ ЗАП ЛИТЕРЫ
ВСТАВИТЬ ЗАПИСЕЙ МЕНЬШЕ
ВХОД ЗАПИСИ МЕНЯЯ
ВХОДНОЙ ЗАПИСЬ МЕТКЕ
ВХОДНОЙ-ВЫХОДНОЙ ЗАПОЛНИТЕЛЬ МЕТКИ
ВХОДНЫХ ЗАПЯТАЯ " МЕТОД
входных-выходны X ЗАТЕМ МОДУЛЕЙ
ВЫВОДА ЗНАК НА
ВЫДАТЬ ЗНАЧ НАЗНАЧИТЬ
ВЫДАЧИ ЗНАЧЕНИЕ НАИБОЛЬШЕЕ-
ВЫДЕЛЕНО 30 ЗНАЧЕНИЕ
ВЫЗВАТЬ ЗС НАИБОЛЬШИЕ-
ВЫЙТИ И ЗНАЧЕНИЯ
вы к л ИДЕНТИФИКАЦИИ НАИМЕНЫПЕЕ-
ВЫКЛЮЧЕНО ИЗ ЗНАЧЕНЙЕ
выполнить • ИЗМЕНЕННЫЙ НАИМЕНЬШИЕ-.
ВЫХОДНОЙ ИЗМЕНИТЬ ЗНАЧЕНИЯ
выходных ИЛИ НАЧАТЬ
ВЫЧ ИМЕНЕМ НАЧАЛЬНОЙ
ВЫЧИСЛЕНИИ ИНАЧЕ НЕ
ВЫЧИСЛЕНИЙ-! ИНДЕКСА НЕОБЯЗАТЕЛ ЬНОГО
ВЫЧ-1 ИНДЕКСИРУЕТСЯ НИ
ВЫЧИСЛЕНИЙ-2 ИНДЕКС-ЦИЛ НОМЕР
ВЫЧ-2 ИСКАТЬ НОМИНАЛЬНЫЙ
ВЫЧИСЛЕНИЙ-3 ИСПОЛЬЗОВАТЬ НУЛИ
ВЫЧ-3 ИСПОЛЬЗУЯ НУЛЬ
вычислить ИСТОЧНИК ОБЛАСТЕЙ
ВЫЧИТАЯ ИСХОДНАЯ-МАШИНА ’ ОБЛАСТЬ
ГЕНЕРИРОВАТЬ К ОБОРУДОВАНИЯ
ГЛАВНЫЙ-ИНДЕКС КАВЫЧКА ОБНОВИТЬ л
ГРАНИЦА КАВЫЧКИ ОБЩАЯ
ГРУППА КАЖДЫЕ ОБЩ-РЕГИСТР
ГРУППУ. КАТУШКЕ ОДНОЙ
274
ОКРУГЛЯЯ ПРЕДПРИЯТИЕ
00 ПРЕОБРАЗОВАТЬ
ОПРЕДЕЛЯЕТ ПРИ
^ПУЩЕНЫ ПРИБАВЛЯЯ ПРИМЕНИТЬ
ОСНОВА ПРИНЯТЬ
ОСОБО ПРОВЕЛ
ОСОБОЕ-ПИСАТЬ ПРОБЕЛЫ
ОСТАНОВИТЬ ПРОГОН
ОСТАТОК ПРОГРАММА
ОТ ПРОГРАММЫ
ОТКЛЮЧИТЬ ПРОДВИЖЕНИЯ
ОТКРЫТЬ ПРОИЗВОЛЬНЫЙ
ОТЛАДКА ПРОПУСК!
ОТНЯТЬ ПРОПУСК2
ОТРИЦАТЕЛЬНО ПРОПУСКЗ
ОТЧЕТ ПРОСМОТРЕТЬ
ОТЧЕТА ПРОЦЕДУР
ОТЧЕТОВ ПРОЦЕДУРА
ОТЧЕТЫ ПРОЦЕДУРЫ
ОФ РАБОТУ
ОШИБКЕ РАБОЧАЯ-МАШИНА
ОШИБКИ РАБОЧЕЙ-ПАМЯТИ
ПАМЯТИ РАВНО
ПАМЯТЬ-ИНДЕКСУ РАЗ
ПАМЯТЬ-СОРТ РАЗА
ПЕРВОГО РАЗДЕЛ
ПЕРВЫЙ РАЗДЕЛИТЬ
ПЕРЕДАТЬ РАЗМЕР
ПЕРЕИМЕНОВЫВАЕТ РАЗМЕР-ФАИЛА-
ПЕРЕЙТИ СОРТ
ПЕРЕМОТКИ РАСШИРЕННЫЙ-
ПЕРЕОПРЕДЕЛЯЕТ ПОИСК
ПЕРЕПОЛНЕНИЕ- РЕВЕРСНО
ЦИЛ РЕЖИМ-СОРТ
ПЕРЕПОЛНЕНИИ РЕЗЕРВИРОВАТЬ
ПЕРЕПРОГОН с
ПЕРЕХОДА С01
• ПЕРЕХОДЯЩУЮ-. С02
ЗАПИСЬ СОЗ
ПЕЧАТАТЬ С04
ПЕЧАТЬ С05
ПИСАТЬ С06
ПИСАТЬ-С-КОНТРО- С07
ЛЕМ С08
ПЛЮС СОЯ
ПО CIO
ПОВТОРЯЕТСЯ СП
ПОДАВИТЬ С12
ПОДАВЛЯЯ СБРОСИТЬ'
ПОДВЕСТИ СВЯЗИ
ПОЗИЦИЯ СДВИНУТО
полномочия СЕГМЕНТОВ
ПОЛОЖИТЕЛЬНО СЕКЦИЯ
ПОЛУЧАЯ СЛЕДУЮЩАЯ
ПОЛЯ СЛЕДУЮЩЕЕ
ПОМЕСТИТЬ СЛЕДУЮЩЕЙ
ПОСЛЕ СЛЕЖЕНИЕ
ПОСЛЕДНИЙ СЛОВ
ПОСЛЕДОВАТЕЛЬ- СЛОЖИТЬ
НЫЙ СООТВ
ПРЕДЛОЖЕНИЕ СООТВЕТСТВЕННО,
СОРТИРОВАТЬ
СОРТИРОВКИ
* СОХРАНЕНИЯ
СПЕЦИАЛЬНЫЕ-
ИМЕНА
СПЕЦИАЛЬНЫЙ
СТАНДАРТНОЙ
СТАНДАРТНЫ
СТОЛБЦА
СТРАНИЦЕ
СТРАНИЦЫ
СТРОК
СТРОКИ
СУММА
• СЧЕТА
СЧЕТЧИК
СЧЕТЧИК-СТРАНИЦ
СЧЕТЧИК-СТРОК
СЧИТАЯ
ТИП
ТОМ
ТОМА
ТОЧКА
УБЫВАНИЮ
УДАЛИТЬ
УМНОЖИТЬ
УПРАВЛЕНИЕ
УПРАВЛЕНИЕ-
ВВОДОМ-ВЫВОДОМ
УПРАВЛЕНИЕ-
ФАЙ ЛАМИ
УПРАВЛЯЕМАЯ
УПРАВЛЯЕМЫЙ
УСТАНОВИТЬ
УСТАНОВКИ
• УСТАНОВКОЙ
ФАЙЛА
ФАЙЛОВ
ФАКТИЧЕСКИЙ
ФР
ФРАГМЕНТ
ЧИСЛО-КАТУШЕК
ЧИСЛОВОЕ
ЧИТАТЬ
Ш
ШАБЛОН,
CONSOLE
CSP
• DISP
• LEAVE
• REREAD
• SYSIN
SYSIPT
SYSLST
• SYSOUT
SYSPCH
SYSPUNCH
. SOI
S02
UPSl-0—UPSI-7
27S
ПРИЛОЖЕНИЕ!
ПЕРФОРАЦИЯ ИСХОДНЫХ ДАННЫХ
Первичным носителем данных на Коболе EG ЭВМ являются перфокарта.
Так как при вводе никакого преобразования данных система ие выполняет,
числовые данные должны перфорироваться иа Картах в соответствии с их опи-
санием в исходной программе. Перфорация данных в упакованном десятичной
формате или в двоичном виде практически трудно выполнима, поэтому числовые
данные, которые вводятся с перфокарт, должны быть описаны и программе (явно
или неявно) как внешние десятичные или внешние с плавающей точкой (с исполь-
зованием ДЛЯ ВЫДАЧИ). При перфорации данных каждая литера занимает
одну колонку перфокарты.
Внешнее десятичное данное, над которым предполагается производить вы-
числения, не должно содержать явной десятичной точки. Поэтому десятичная
точка нли совсем не должна перфорироваться, или должна удаляться из значения
данного программным путем до того, каи над иим будут производиться вычис-
ления.
В связи с тем что в формате представления внешних десятичных данных
знак числа должен занимать зонную часть младшего байта, при перфорации от-
рицательных чисел вместо последней цифры числа нужно перфорировать сим-
вол, внутренний код которого представляеттребуемую комбинацию бит (см. таб-
лицу).
Последняя цифра отрицательного числа Перфорируемый символ Пробивки на перфо- карте Шесяиадцатери чный КОД
0 11—0 D0
1 J 11—1 D1
2 к 11—2 D2
3 L 11—3 D3
4 М 11—4 D4
5 N 11—5 D5
6 О 1й-6 D6
7 Р 11—7 D7
8 Q 11—8 D8
9 R 11—9 D9
Таким образом, для того чтобы при вводе данные были представлены в фор-
мате, соответствующем описанию данных, они должны быть отперфорированы,
как показано на следующих примерах:
Значение данного Описание Перфори руетса
1020 9(4) 1020
+ 123 39(4) 0123
— 123 39(4) 012L
—12.34 39(4)Т99 00123М
Чтобы упростить перфорацию, знак числа можно отперфорировать отдель-
ным символом,'а затем выполнить преобразование его к нужному виду програм-
мным путем.
Пусть, нацример, требуется привести к допустимому формату данные
вида тт 1234.56 и _0007.89, отперфорированные по следующему шаблону:
знак числа отдельным символом (минус — для отрицательных чисел, про-
бел — для положительных), четыре цифры в целой.части числа, явная деся-
тичная точка и две цифры в дробной части числа. В .программе на Коболе
это может быть выполнено следующим образом:
276/
рХэдел данных
СЕКЦИЯ ФАЙЛОВ.
ОФ карты МЕТКИ ОПУЩЕНЫ.
01 карта.
02 вх-даннвеШАБЛОН Х(8).
02 формат ПЕРЕОПРЕДЕЛЯЕТ вх-данное.
03 анакч. Ш X.
03 целая Ш 9(4).
03 точк Ш X.
03 дробная Ш 99.
02 ЗАПОЛНИТЕЛЬ ШАБЛОН Х(72).
СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.
77 сум ШАБЛОН 39(4)Т99 ЗНАЧЕНИЕ НУЛЬ.
01 раб-поле.
02 число ШАБЛОН 39(4)Т99.
02 абс-чвсло ШАБЛОН 9(4)Т99.
02 раб-формат ПЕРЕОПРЕДЕЛЯЕТ абс-чвсло.
03 целая Ш 9(4).
03 дробная Ш 99.
РАЗДЕЛ ПРОЦЕДУР.
ОТКРЫТЬ ВХОДНОЙ карты.
Ml. ЧИТАТЬ карты В КОНЦЕ ПЕРЕЙТИ К кон.
ПЕЧАТАТЬ G ИМЕНЕМ вх-давное.
ПОМЕСТИТЬ СООТВ формат В раб-формат.
ЕСЛИ знакч='—'
ВЫЧИСЛИТЬ число = — абс-чвсло
ИНАЧЕ ПОМЕСТИТЬ абс-число В число.
СЛОЖИТЬ число G сум
ПЕРЕЙТИ К м1. ~
кои. ПЕЧАТАТЬ С ИМЕНЕМ сум.
ЗАКРЫТЬ карты. ОСТАНОВИТЬ РАБОТУ.
Логическая запись, размер которой превосходит 80 символов, перфорируется
ва нескольиих картах. В описании файла может быть определено несколько ти-
пов записей одинакового размера (80 символов). Тип записи может распознавать-
ся с помощью специально введенного для этой цели шифра ва каждой перфо-
карте или.каким-либо другим образом в зависимости от характера информации.
ЛИТЕРАТУРА
1. Кобол ЭВМ «Минск-32». М., «Статистика», 1973.
2. Кобол. Программированное пособие. Под ред. Е. Л. Ющенко, Л. П. Ба-
бенко, Е. Н. Машбиц. Киев, «Вища школа», 1973.
3. Система математического обеспечения ЕС ЭВМ. Под общ. ред. А.М. Ла-
рионова. М., «Статистика», 1974.
4. Операционная система ДОС ЕС. Общие положения. М., «Статистика»,
1975.
5. Система ИБМ/360. Введение в запоминающие устройства прямого до-
ступа и- методы организации данных (Пер. с англ.). Под ред. Г. К. Столярова.
М., «Статистика», 1974.
6. Операционная система ДОС ЕС.' Справочник программиста. М., «Ста-
тистика», 1977.
ОГЛАВЛЕНИЕ
Предисловие ............ ............................ 3
1. Введение. Общие сведения о языке ..................... 6
1.1. Основные понятия......................... . . . ?
1.1.1. Структура исходной программы..................
1.1.2. Система обозначений.......-.............
1.1.3. Набор литер изыка .........
1.1.4. Типы слов........ . * . .
1.1.5. Уникальность имен. Уточнение ..............
1.1.6. Константы ....................................
д 1.1.7. Специальные регистры............................
-1.J.8. Запись программы на бланках и перфорации . ..
1.2.1 Методы обработки файлов . . . ^............
1.2.1. Общие сведения......................
1.2.2. Типы организации файлов................
1.2.3. Методы доступа................
1.2.4. Виды обработки.....................
1.2.5. Обзор методов обработки файлов ...............
1.2.6. Интерфейс с системой. ...................... .
1 ч а с т ь
ЯДРО. ПОСЛЕДОВАТЕЛЬНЫЙ
И ПРОИЗВОЛЬНЫЙ доступ
2. Раздел идентнфикацнн.............................
3. Раздел оборудования '. ... .........................
3.1. Секция конфигурации...............................
3.1.1. Параграф ИСХОДНАЯ-МАШИНА......................
3.1.2. Параграф РАБОЧАЯ-МАШИНА.......................
3.1.3. Параграф СПЕЦИАЛЬНЫЕ-ИМЕНА....................
3.2. Секция ввода-вывода...............................
3.2. L Параграф У ПРАВЛЕНИЕ-ФАЙЛАМИ...........
3.2, 2. Параграф УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ..........
4. Раздел данйых.........................................
4.1. Общие.введения....................................
4.2. Статья описания файла.........................
4.2.1. Фраза В БЛОКЕ.................................
4.2.2. Фраза В ЗАПИСИ................................
4.2.3. Фраза МЕТОД ЗАПИСИ............................
4.2.4. Фраза МЕТКИ...................................
4.2.5. Фраза ЗНАЧЕНИЕ................................
4.2.6. Фраза ЗАПИСИ ДАННЫХ...........................
4.3. Статья описания данного .... .....................
4.3.1. Общий формат................................,
4.3.2. Фраза имя-данного нлн ЗАПОЛНИТЕЛЬ.............
4.3.3. Фраза ШАБЛОН..................................
4.3.4. Фраза ПРОБЕЛ КОГДА НУЛЬ......................
4.3.5. Фраза об использовании ......................
4.3.6. Фраза ВЫДЕЛЕНО...............................
4.3.7. Фраза СДВИНУТО ВПРАВО........................
4.3.8. Фраза ЗНАЧЕНИЕ................................
4.3.9. Фраза ПЕРЕОПРЕДЕЛЯЕТ...........................
’4.3.10. Фраза ПЕРЕИМЕНОВЫВАЕТ . ......................
У
278
Раздел процедур ............ . ........ 98
*.1. Арифметические операторы ....
5.1.1. Назначение и форматы ..................
Б.1.2. Фраза ОКРУГЛЯЯ.........................
Б. 1.3. Фраза ПРИ ПЕРЕПОЛНЕНИИ................
5.1.4. Фраза СООТВЕТСТВЕННО...................
5.2. Операторы управления последовательностью выполнения процедур
5.2.1. Оператор ПЕРЕЙТИ ..'...................
5.2.2. Оператор ИЗМЕНИТЬ....................
5.2.3 Оператор ВЫПОЛНИТЬ .....................
5.2.4. Оператор ОСТАНОВИТЬ ................
5.2.Б. Оператор ВЫЙТИ.........................
5.2.6. Оператор ЕСЛИ ...........
5.3. Операторы перемещения и редактирования .... .......
5.3.1. Оператор ПОМЕСТИТЬ ....................
5.3.2. Оператор ПРОСМОТРЕТЬ ..................
5.3.3. Оператор ПРЕОБРАЗОВАТЬ ................
5.4 Преобразование форматов данных ..............
5.5. Операторы ввода-вывода .......
5.5.1. Оператор ОТКРЫТЬ ...................
5.5.2. Оператор ПОДВЕСТИ ..................
5.5.3 Оператор ЧИТАТЬ..........
5.5.4 Оператор ПИСАТЬ.....................
5.5.5. Оператор ОБНОВИТЬ ..................
5.5.6. Оператор ЗАКРЫТЬ......................
5.5.7. Оператор ПРИНЯТЬ..............
5.5.8. Оператор ВЫДАТЬ ......................
5.5.9. Оператор ИСПОЛЬЗОВАТЬ.................
•98
98
102
102
103
104
104
105
106
111
112
113
122
122
124
126
128
129
129
132
133
135
140
141
144
145
147
Примеры ирограмв ...... .................. .153
6.1. Создание прямого файла а фактичевкой адресацией дорожки
(только для ДОС ЕС).......................... 153
6.2. Обновление файла с индексной организацией ..155
2 часть
ДОПОЛНИТЕЛЬНЫЕ возможности
7. Обработка таблиц..................................... 157
7.1. Средства описания и обработки таблиц в разделе данных .... 158
7.1.1. Фраза ПОВТОРЯЕТСЯ...........................158
7.1.2. Фраза ДЛЯ ИНДЕКСА ..........................161
7.2. Средства обработки таблиц в разделе процедур... . . . 162
7.2.1. Иидексироваиие............................ 162
7.2.2. Сравнения, включающие имена индексов и индексные
данные.......................................... 165
7.2.3. Оператор ИСКАТЬ........................... 166
7.2.4. Оператор УСТАНОВИТЬ.........................171
7.3. Пример программы обработки таблиц .... ...........174
8. Сортировка.......... 176
8.1. Средства раздела оборудования для сортировки . . ...... 176
8.1.1. Параграф СПЕЦИАЛЬНЫЕ-ИМЕНА..............176
8.1.2. Параграф УПРАВЛЕНИЕ-ФАЙЛАМИ.............176
8.1.3. Параграф УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ . ... . 178
8.2. Средства раздела данных для сортировки.. Г.... 179
8.3. Средства раздела процедур для сортировки . ......... 179
8.3.1. Оператор СОРТИРОВАТЬ . ...................179 -
8.3.2. Вилючение записей в сортируемый файл. Оператор ПЕРЕ-
ДАТЬ ...........................................181
8.3.3. Извлечение рассортированных записей. Оператор ВЕРНУТЬ 183
27?
8.3.4. Связь программы на Кобеле г еиоявмжЛ программой
сортировки . ............................... 186
8.4. Првмер программы а сортировкой . ...................18г
9. Генератор отчетов. ... ................................ 188
9.1. Основные понятия................................. 188
9.2. Статья описания файла отчетов в секция файлов........198
9.2.1. Фраза ОТЧЕТ . ............................... 197
9.2.2. Фраза ЗАПИСИ ДАННЫХ............................197
9.2.3. Фраза В ЗАПИСИ.................................197
9.3. Секция отчетов..... ............................... 198
9.3.1. Статья опнсаняя отчета....................... 198
9.3.2. Статья описания группы отчета................ 203
9.4. Операторы вывода отчета............................. 216
9.4.1. Оператор НАЧАТЬ..........~................... 21S
. 9.4.2. Оператор ГЕНЕРИРОВАТЬ.........................217
9.4.3. Оператор ЗАКОНЧИТЬ........................... 219
9.4.4. Оператор ИСПОЛЬЗОВАТЬ . .......................219
9.4.5. Оператор ПОДАВИТЬ ПЕЧАТЬ............ . . . .220
9.5. Специальные регистры СЧЕТЧИК-СТРАНИЦ в СЧЕТЧИК-
СТРОК ...................................................220
9.6. Првмер программы.......... 221
10. Сегментация................................................228
10.1 Общие сведения........................................ 225
10.2. Типы сегментов....................................... 225
10.3. Фраза ГРАНИЦА СЕГМЕНТОВ...............................226
10.4. Планирование структуры сегментированной программы . . , . 226
10.5. Использование операторов ИЗМЕНИТЬ и ВЫПОЛНИТЬ . в
сегментированной программе..................................227
10.6. Особенности трансляции, редактирования и выполнения сег-
ментированной программы ................................... 228
11. Связь между программами.................................... 229
И.Г. Общие положеивя.......................................229
11.2. Средства связи и вызывающей программе. Оператор ВЫЗВАТЬ 230
11.3. Средства связи в вызываемой программе. Оператор ВХОД . . . 231
14.4. Передача даийых.......................... 232
11.5. Завершение программы ................................ 234
11.6. Пример организации связи между программами...........235
11.7. Связь с программами на языке Ассемблера ..... . . . . . 236
11.8. Редактирование связей между программами ... ...... 237
12. Библиотека............................................ 240
12.1. Общие положения................................. 240
12.2. Библиотеки исходных текстов....... . . . . . . . . . . . 240
12.3. Оператор КОПИРОВАТЬ................................240
12.4. Операторы ОСНОВА, ВСТАВИТЬ в УДАЛИТЬ...............243
13. Отладка ............................* . . . ...........244
13.1. Язык отладки..................................... 245
13.1.1. Оператор ВКЛЮЧИТЬ (ОТКЛЮЧИТЬ) СЛЕЖЕНИЕ 245
13.1.2. Оператор ПЕЧАТАТЬ...........................245
13.1.3. Оператор ПРИ . .............................247
13.2. Отладочный пакет................................. 248
Приложение 1. Сводка форматов . ............................. . 251
Приложение 2. Список зарезервированных слов.................274
Приложение 3. Перфорация исходных данных.................. 276
Литература.................................... г...........278