Если задана фраза ALL (ВСЕМИ), одно или несколько пос­ледовательных вхождений литерала-1 или значения данного, представленного идентификатором-2, обрабатываются так же, как одно вхождение, которое помещается в принимающее поле согласно общему правилу 13 г.

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

  2. Литерал-1 или значение данного, представленного иден­тификатором-2, может содержать любые литеры из множества литер машины.

  3. Каждый литер ал-1 или данное, представленное иденти­фикатором-2, представляет один ограничитель. Когда ограни­читель содержит две или более литеры, эти литеры должны на­ходиться в указанном ограничителем порядке в последователь­ных позициях пересылаемого данного, чтобы быть распознанны­ми в качестве ограничителя.

  4. Если во фразе DELIMITED BY (ОГРАНИЧИВАЯСЬ) задано два или более ограничителя, между ними существует ус­ловие OR (ИЛИ). Каждый ограничитель поочередно сравни­вается с рассматриваемыми позициями, пересылаемого поля в указанной последовательности. При обнаружении совпадения рассматриваемые литеры считаются единым ограничителем. Ни одна литера в пересылаемом поле не может рассматриваться принадлежащей нескольким ограничителям.

К началу работы оператора UNSTRING (РАЗОБРАТЬ) данное, определяемое идентификатором-4, является текущим принимающим полем, в которое пересылаются литеры данного, представленного идентификатором-1. Позиции последнего про­сматриваются согласно следующим правилам:

  1. если задана фраза POINTER (УКАЗАТЕЛЬ), строка ли­тер, представленная идентификатором-1, просматривается, на­чиная с относительной позиции литеры, указанной значением данного, представленного идентификатором-?. Если фраза POINTER (УКАЗАТЕЛЬ) не задана, проверка строки литер на­чинается с самой левой ее позиции;

  2. если задана фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ), просмотр прекращается при обнаружении вхождения ограничи­теля, заданного литералом-1 или значением данного, представ­ленного идентификатором-2 (см. общее правило 11). Если фра­за DELIMITED BY (ОГРАНИЧИВАЯСЬ) не задана, число про­сматриваемых литер равно размеру текущего принимающего данного (однако, если знак принимающего данного занимает отдельную позицию литеры, число просматриваемых литер по­лагается на единицу меньшим размера текущего принимающего поля данного).

Если вхождение ограничителя не обнаружено, просмотр оканчивается на последней позиции литеры данного, представ­ленного идентификатором-1;

  1. просмотренные литеры (за исключением литер, совпадаю­щих с ограничителем, если они имеются) рассматриваются как элементарные буквенно-цифровые данные и пересылаются в те­кущее принимающее поле согласно правилам оператора MOVE (ПОМЕСТИТЬ) (см. п. 6.19 настоящей части);

  2. если задана фраза DELIMITER (ОГРАНИЧИТЕЛЬ), об­наруженные при просмотре литеры ограничителя рассматрива­ются как элементарное буквенно-цифровое данное и помеща­ются согласно правилам оператора MOVE (ПОМЕСТИТЬ) в данное, представленное идентификатором-5.

Если вхождение ограничителя в данное, представленное идентификатором-1, не обнаружено, то данное, представленное идентификатором-5, заполняется пробелами; |

  1. если задана фраза COUNT IN (СЧЕТ), то количество I просмотренных литер (исключая литеры ограничителя, если они | имеются) помещается согласно правилам для перемещения ї элементарного данного в данное, представленное идентифика- [ тором-6; S

  2. если задана фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ), то после заполнения очередного принимающего данного про- | смотр продолжается с первой литеры справа от ограничителя., f Если фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ) не задана, I' просмотр продолжается от первой литеры, находящейся справа | от последней пересланной литеры; | I ж) после завершения пересылки в принимающее данное, [ представленное идентификатором-4, текущим принимающим ‘ полем становится данное, представленное следующим вхожде- ( ниєм идентификатора-4, и все описанные выше действия повто­ряются до тех пор, пока не будут исчерпаны все литеры в дан­ном, определяемом идентификатором-1, или не будут заполнены все принимающие поля.

  1. Начальная установка значения данного, связанного с фразой POINTER (УКАЗАТЕЛЬ) или TALLYING (СЧИТАЯ), осуществляется пользователем.

' (15) Значение данного, представленного идентификато­ром-?, увеличивается на единицу при просмотре каждой литеры в данном, представленном идентификатором-1. После завер­шения выполнения оператора UNSTRING (РАЗОБРАТЬ) с фразой POINTER (УКАЗАТЕЛЬ) значение данного, представ­ленного идентификатором-?, становится равным начальному значению плюс число просмотренных литер данного, представ­ленного идентификатором-1.

  1. После завершения выполнения оператора UNSTRING і (РАЗОБРАТЬ) с фразой TALLYING (СЧИТАЯ) значение дан­ного, представленного идентификатором-8, становится равным его начальному значению плюс число принимающих полей, участвовавших в выполнении оператора.

  2. Условие переполнения возникает при следующих ситуа­циях:

  1. если к моменту начала ^работы оператора UNSTRING (РАЗОБРАТЬ) значение данного, представленного идентифи­катором-?, меньше 1 или больше размера данного, представлен­ного идентификатором-1;

  2. если в некоторый момент выполнения оператора UNSTRING (РАЗОБРАТЬ) данное, представленное идентифи­катором-!, содержит непросмотренные позиции, а все принима­ющие поля уже использованы.

При обнаружении условия переполнения выполнение оператора UNSTRING (РАЗОБРАТЬ) прекращается; если ука­зана фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), то она игнорируется, а управление передается на конец оператора UNSTRING (РАЗОБРАТЬ); если же была указана фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), то управление пере­дается повелительному-оператору-1. В этом случае выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-1. Если выполняется оператор ветв­ления процедур или условный оператор, вызывающий явную передачу управления, управление передается согласно прави- лам для соответствующих операторов; в противном случае пос­ле завершения выполнения повелительного-оператора-1 управ­ление передается на конец оператора UNSTRING (РАЗО­БРАТЬ).

  1. Фраза END-UNSTRING (КОНЕЦ-РАЗОБРАТЬ) огра­ничивает область действия оператора UNSTRING (РАЗО­БРАТЬ) (см. ч. 4, п. 6.4.3).

  2. Если во время выполнения оператора UNSTRING (РАЗОБРАТЬ) описанные в пункте (17) условия не возникли, после завершения пересылки данных согласно другим общим правилам фраза OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), если она задана, игнорируется, а управление передается на конец оператора UNSTRING (РАЗОБРАТЬ) или, если указана фраза NOT OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), повелительному- оператору-2. Если управление передано повелительному-опе- ратору-2, выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если вы­полняется оператор ветвления процедур или условный опера­тор, подразумевающий явную передачу управления, управле­ние передается согласно правилам для соответствующих опе­раторов; в противном случае после завершения выполнения по- велительного-оператора-2 управление передается на конец опе­ратора UNSTRING (РАЗОБРАТЬ).

  3. Если идентификатор-1, идентификатор-2 и идентифи-і катор-3 занимают ту же область памяти, что и идентифика­тор-5, идентификатор-6, идентификатор-7 или идентифика­тор-8, или если идентификатор-4, идентификатор-5 и идентифи­катор-6 занимают ту же область памяти, что и идентификатор-7 или идентификатор-8, или если идентификатор-7 и идентифика­тор-8 занимают одну и ту же область памяти, результат вы­полнения оператора UNSTRING (РАЗОБРАТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания данных (см. п. 6.4.5 настоящей части).

7. ОТЛАДКА В ЯДРЕ

  1. Общее описание

Средства отладки в ядре обеспечивают пользователя отладоч­ными строками и переключателем времени компиляции для отла­дочных строк.

  1. Переключатель времени компиляции

Фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ)’ является частью параграфа SOURCE-COMPUTER (ИСХОД- НАЯ-МАШИНА) (см. п. 4.3 настоящей части). Она служит пе­реключателем времени компиляции для отладочных строк, содер­жащихся в отдельно компилируемой программе

.Если в отдельно компилируемой программе указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ), все отла- дфіные строки компилируются, как определено в данном представ­лений ядра. Если же фраза WITH DEBUGGING MODE (В РЕ­ЖИМЕ ОТЛАДКИ) не указана, все отладочные строки компили­руются так, как если бы они представляли строки комментариев.

Наличие или отсутствие фразы WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) логически определяется после обработки все» операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕ­НИТЬ).

  1. Отладочные строки

Отладочной строкой называется строка с литерой D(T) в об­ласти индикатора строки. Любая отладочная строка, состоящая только из пробелов от границы А до границы R, считается пустой.

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

После обработки всех операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ) отладочная строка рассматривается как комментарий, если в параграфе SOURCE-COMPUTER (ИСХОД- НАЯ-МАШИНА) не указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ).

Допускаются несколько последовательно расположенных от­ладочных строк.

В отдельно компилируемой программе отладочные строки мо­гут располагаться только после параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА).

Часть 7. МОДУЛЬ ПОСЛЕДОВАТЕЛЬНОГО ВВОДА ВЫВОДА

  1. ВВЕДЕНИЕ В МОДУЛЬ ПОСЛЕДОВАТЕЛЬНОГО ВВОДА ВЫВОДА

    1. Назначение

Модуль последовательного ввода-вывода обеспечивает воз­можность доступа к записям файла в установленной последова­тельности. Последовательность устанавливается в результате за­несения записей в файл.

  1. Характеристика уровней

Уровень 1 последовательного ввода-вывода обеспечивает не­полные возможности для статей управления файлом, статей опи­сания файла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ- ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 1 последо­вательного ввода-вывода обеспечивает ограниченные возможнос­ти операторов CLOSE (ЗАКРЫТЬ), USE (ИСПОЛЬЗОВАТЬ), 396OPEN (ОТКРЫТЬ), WRITE (ПИСАТЬ) и READ (ЧИТАТЬ). Полные возможности обеспечиваются для оператора REWRITE (ОБНОВИТЬ).

Уровень 2 последовательного ввода-вывода обеспечивает полные возможности для статей управления файлом, статей описания файла и статей параграфа I-O-CONTROL (УПРАВ- ЛЕНИЕ-ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 2 последовательного ввода-вывода обеспечивает полные возмож­ности операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), WRITE (ПИ­САТЬ) и USE (ИСПОЛЬЗОВАТЬ).

  1. Понятия языка

    1. Организация

Последовательный файл организован так, что каждая запись* кроме последней, имеет единственную запись-преемника и каждая запись, кроме первой, имеет единственную запись-предшествен­ника. Это отношение следования устанавливается оператором WRITE (ПИСАТЬ) при создании файла. Однажды установленное отношение следования не меняется. Исключением является слу- j чай, когда записи добавляются в конец файла.

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

  1. Метод доступа

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

  1. У к а з а т е л ь текущего тома

Указатель текущего тома — это логическое понятие, использу­емое в этом документе для облегчения точного задания текущего тома последовательного файла.

  1. У к а з а т е л ь позиции файла

Указатель позиции в файле —• это логическое понятие, исполь­зуемое в этом документе для облегчения точной спецификации следующей записи, к которой должен осуществляться доступ при выполнении заданных операций ввода-вывода. На установку ука­зателя позиции файла влияют только операторы CLOSE (ЗАК­РЫТЬ), OPEN (ОТКРЫТЬ) и READ (ЧИТАТЬ). Понятие указа­теля позиции файла не имеет смысла для файла, открытого как выходной I или как дополняемый

  1. С о с т о я н и е ввода-вывода

Состояние ввода-вывода — это логическое понятие, характе­ризующееся двухсимвольным значением, которое устанавливает­ся для указания состояния операции ввода-вывода во время вы­полнения операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ) или WRITE (ПИ­САТЬ) перед выполнением любого повелительного оператора, свя­занного с этим оператором ввода-вывода, и перед выполнением любой применимой процедуры USE AFTER STANDARD EXCEP­TION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУ- РЫ ОШИБКИ). Значение состояния ввода-вывода доступно Ко- бол-программе посредством фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) в статье управления файлом.

Состояние ввода-вывода определяет также, будет ли выпол­няться процедура USE AFTER STANDARD EXCEPTION (ИС­ПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБ­КИ). Если возникает любое условие, отличное от тех, которые оп­ределены ниже как «успешное завершение», может выполняться указанная процедура по правилам, заданным для оператора USE (ИСПОЛЬЗОВАТЬ). Если возникает одно из условий «успешное завершение», никакая процедура такого типа не будет выполнять­ся (п. 4.6 настоящей части).