ГОСТ 22558-89 сторінка 49 з 116
В формате 1 выполняются следующие действия:
имя-индекса-1 устанавливается на значение, указывающее на элемент таблицы, соответствующий номеру вхождения, определяемому именем-индекса-2, идентификатором-2 или целым-1. Если идентификатор-2 есть индексное данное или если имя-индекса-2 относится к той же таблице, что и имя-индекса-1, то преобразование не происходит;
если идентификатор-1 есть индексное данное, то он может быть установлен равным либо значению имени-индекса-2, либо идентификатору-2, где идентификатор-2 также является индексным данным; в обоих случаях преобразование не происходит;
если идентификатор-1 не является индексным данным, то он может быть установлен только на номер вхождения, соответствующий значению имени-индекса-2. В этом случае ни идентификатор-2, ни целое-1 не могут быть использованы;
процесс повторяется для каждого вхождения имени-индек- са-1 и идентификатора-1, если они заданы. При этом каждый раз используется значение имени-индекса-2 или данного, представленного идентификатором-2, которое они имели в начале выполнения оператора. Всякое индексирование, связанное с идентификатором-1, выполняется непосредственно перед изменением соответствующего данного.
В формате 2 значение имени-индекса-3 увеличивается или уменьшается на значение, которое соответствует числу вхождений, представляемому целым-2 или значением данного, представленного идентификатором-3, после этого процесс повторяется для каждого вхождения имени-индекса-3 и т. д. Каждый раз используется значение данного, представленного идентификатором-3, такое же, как в начале выполнения оператора.
Ниже представлены допустимые комбинации операндов в операторе SET (УСТАНОВИТЬ) в формате 1. Указанные ссылки относятся к общим правилам, применяемым при пересылке для данного сочетания операндов. .
Пересылаемое данное
Принимающее данное
Целоз-данное
Имя-индекса
Индексное данное
Целое-литерал
Не разрешено Зв
Разрешено За
Не разрешено 36
Целое-данное
Не разрешено Зв
Разрешено За
Не разрешено
36
Имя-индекса
Разрешено 'Зв
Разрешено За
Разрешено
36
Индексное
Не разрешено Зв
Разрешено За*
Разрешено 36*
* Никакие преобразования не имеют места.
Формат 3
Состояние каждого внешнего переключателя, соответствующего мнемоническому-имени-1, изменяется таким образом, что результирующее значение «истина» вычисления имени-условия, связанного с этим переключателем, будет отражать состояние «включено», если указана фраза ON (ВКЛЮЧЕНО), или состояние «выключено»; если указана фраза OFF (ВЫКЛЮЧЕНО) (см. п. 6.3.1.4 настоящей части).
Формат 4
Литерал во фразе VALUE (ЗНАЧЕНИЕ), соответствующей имени-условия-1, присваивается условной переменной согласно правилам использования фразы VALUE (ЗНАЧЕНИЕ) (см. п. 5.15 настоящей части). Если указано несколько литералов во фразе VALUE (ЗНАЧЕНИЕ), условной переменной присваивается значение первого литерала, заданного в этой фразе.
Если указано несколько .имен условий при использовании ■ формата 4, результаты такие же, как и в случае записи отдельного оператора SET (УСТАНОВИТЬ) для каждого имени-условия-1 в том же порядке, в каком они указаны в операторе SET (УСТАНОВИТЬ).
Оператор STOP (ОСТАНОВИТЬ)
Назначение
Оператор STOP (ОСТАНОВИТЬ) прекращает полностью или временно выполнение единицы исполнения.
Указание литерала в операторе STOP (ОСТАНОВИТЬ) является устаревшим элементом в настоящем стандарте и будет удалено в следующей редакции стандарта.
Общий формат
STOP j RUN
[литерал-1
ОСТАНОВИТЬ j РАБ0ТУ . j
( литерал-1 j
Синтаксические правила
Литерал-1 не может быть стандартной константой, начинающейся словом ALL (ВСЕ).
Если оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) появляется в последовательности повелительных операторов предложения, то он должен быть последним оператором предложения.
Если литерал числовой, то он должен быть целым без знака.
Общие правил а
Если указана фраза RUN (РАБОТУ), выполнение единицы исполнения прекращается и управление передается операционной системе.
При выполнении оператора STOP RUN (ОСТАНОВИТЬ РАБОТУ) выполняется неявный оператор CLOSE (ЗАКРЫТЬ)1 без необязательных вариантов для всех открытых файлов данной единицы исполнения. Никакие процедуры USE (ИСПОЛЬЗОВАТЬ), соответствующие этим файлам, не выполняются.
Если единица исполнения получала сообщения, то по оператору STOP RUN (ОСТАНОВИТЬ РАБОТУ) система управления сообщениями уничтожает в очереди сообщения, лишь частично полученные этой единицей исполнения.
Часть сообщения, передаваемая из единицы исполнения оператором SEND (ПОСЛАТЬ), но не законченная EMI (ИКС) или EGI (ИКГ), исключается из системы.
Если указан вариант STOP (ОСТАНОВИТЬ) литерал-1, выполнение единицы исполнения приостанавливается, а литерал-1 сообщается оператору ЭВМ. Продолжение функционирования единицы исполнения начинается со следующего выполнимого оператора в том случае, когда подключена зависящая от реализации процедура управления возобновлением единицы исполнения.
Оператор STRING (СОБРАТЬ)
Назначение
Оператор STRING (СОБРАТЬ) соединяет часть или полное содержимое двух или нескольких данных в одно данное.
Общи й формат
идентификатор-1 ]
литерал-1 ]
идентификатор-2
DELIMITED BY литерал-2 SIZE
INTO идентификатор-3
[WITH POINTER идентификатор-4]
[ON OVERFLOW повелительный-оператор-1]
[NOT ON OVERFLOW повелительный-оператор-3]
[END-STRING]
СОБРАТЬ I идентификатор-1 1 . ОГРАНИЧИВАЯСЬ . .ПИТРПЯЛ-
идентификатор-2
литерал-2 ...
РАЗМЕРОМ
В идентификатор-3 [УКАЗАТЕЛЬ идентификатор-4]
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1 ]
[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]
[КОНЕЦ-СОБРАТЬ]
Синтаксические правила
Литерал-1 и литерал-2 не могут быть стандартными константами, начинающимися со слова ALL (ВСЕ).
Все литералы должны быть нечисловыми литералами и все идентификаторы, за исключением идентификатора-4, дОлж
ны быть определены явно или неявно с использованием DISPLAY (ДЛЯ ВЫДАЧИ).
Идентификатор-3 не может быть модификацией ссылки.
Идентификатор-3 не может быть редактируемым данным; он не может быть описан с фразой JUSTIFIED (СДВИНУТО).
Идентификатор-4 должен быть описан как элементарное числовое целое данное, имеющее достаточный размер для того, чтобы содержать значение, равное увеличенному на единицу размеру данного, представленного идентификатором-3. Символ Р(М) не может использоваться в строке-литер шаблона данного, представленного идентификатором-4.
Если идентификатор-1 или идентификатор-2 представляют элементарные числовые данные, то они должны быть описаны как целые, причем соответствующие строки-литер шаблона не должны содержать литеры Р (М).
Общие правила
Идентификатор-1 и литерал-1 представляют собой пересылаемые данные, а идентификатор-3 — принимающее данное.
Литерал-2 и значение данного, представленного идентификатором-2, указывают одну или несколько литер, ограничивающих перемещение. Если используется фраза SIZE (РАЗМЕРОМ), данные, определенные идентификатором-1 или литералом-1, помещаются полностью. Если в качестве ограничителя используется стандартная константа, она представляет нечисловой литерал длиной в одну литеру.
Если вместо литерала-1 и литерала-2 используется стандартная константа, то она представляет данное длиной в одну литеру с использованием DISPLAY (ДЛЯ ВЫДАЧИ).
Перемещение данного при выполнении оператора STRING (СОБРАТЬ) определяется следующими правилами:
литеры из литерала-1 или из значения данного, представляемого идентификатором-1, передаются в данное, представляемое идентификатором-3, согласно правилам перемещения буквенно-цифрового в буквенно-цифровое данное, однако дополнение пробелами не производится;
если задана фраза DELIMITED (ОГРАНИЧИВАЯСЬ) без фразы SIZE (РАЗМЕРОМ), значение данного, представляемого идентификатором-1, или значение литерала-1 передается в принимающее данное в последовательности, заданной оператором STRING (СОБРАТЬ), начиная с самой левой литеры и продолжая слева направо, пока не будет достигнут конец данного или не встретится литера (литеры), заданная литералом-2 или значением данного, представленного идентификатором-2. Эта литера (литеры) не пересылается;
если задана фраза DELIMITED BY SIZE (ОГРАНИЧИВАЯСЬ РАЗМЕРОМ), значение, представленное литералом-1, или значение данного, представляемого идентификатором-1, передаются в последовательности, заданной оператором STRING (СОБРАТЬ), в данное, представляемое идентификатором-3, пока все данные не будут переданы или не будет достигнут конец данного, определяемого идентификатором-3.
Эти действия повторяются до исчерпания всех вхождений литер ала-1 или данных, представленных идентификатором-1.
Если задана фраза POINTER (УКАЗАТЕЛЬ), значение данного, представленного идентификатором-4, перед выполнением оператора STRING (СОБРАТЬ) должно быть установлено в начальное значение (не меньше 1).
Если фраза POINTER (УКАЗАТЕЛЬ) не задана, оператор выполняется так, как если бы было задано начальное значение данного, представленного идентификатором-4, равное 1.
Когда литеры пересылаются в принимающее данное, на которое ссылается идентификатор-3, пересылка литер в принимающее данное начинается от указанной значением данного, представленного идентификатором-4, позиции литеры этого данного (при условии, что значение данного, представленного идентификатором-4, не превышает длины данного, представленного идентификатором-3) и затем данное, представленное идентифи- катором-4, увеличивается на единицу перед пересылкой каждой литеры или перед завершением выполнения оператора STRING (СОБРАТЬ). Значение данного, представленного идентификатором-4, во время выполнения оператора STRING (СОБРАТЬ) изменяется только вышеописанным методом.
В результате выполнения оператора STRING (СОБРАТЬ) изменяется только та часть данного, представленного идентификатором-3, к которой было обращение во время выполнения оператора STRING (СОБРАТЬ). Оставшаяся часть данного, представленного идентификатором-3, после выполнения оператора STRING (СОБРАТЬ) не изменяется.
Перед каждой пересылкой литеры в данное, представленное идентификатором-3, если значение данного, представленного идентификатором-4, окажется меньшим 1 либо превзойдет число позиций литер в данном, представляемом идентификатором-3, дальнейшее перемещение в данное, представляемое идентификатором-3, прекращается и фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), если она указана, игнорируется, а управление передается на конец оператора STRING (СОБРАТЬ). Если в формате оператора указана фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), то выполняется пове- лительный-оператор-1, указанный в этой фразе. Если управление передается повелительному-оператору-1, выполнение продолжается согласно правилам для каждого оператора, указанного в повелительном-операторе-1. Если выполняется оператор ветвления процедур или условный оператор, вызывающий явную передачу управления, то управление передается согласно правилам для этих операторов; в противном случае по завершении выполнения повелительного-оператора-1 управление передается на конец оператора STRING (СОБРАТЬ).
Если во время выполнения оператора STRING (СОБРАТЬ) с фразой NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) условия, описанные в общем правиле (9), не встречаются, после пересылки данных согласно другим общим правилам фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), если она указана, игнорируется и управление передается на конец оператора STRING (СОБРАТЬ), или, если указана фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), повелительному-опера- тору-2. Если управление передается повелительному-операто- ру-2, выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется ветвление процедуры или условный оператор, ведущий к явной передаче управления, управление передается в соответствии с правилами для этого оператора; в противном случае после завершения выполнения повелительного-оператора-2 управление передается на конец оператора STRING (СОБРАТЬ).
(И) Фраза END-STRING (КОНЕЦ-СОБРАТЬ) ограничивает область действия оператора STRING (СОБРАТЬ) (см. ч. 4, п. 6.4.3).
Если идентификатор-1 и идентификатор-2 занимают ту же область памяти, что и идентификатор-3 и идентификатор-4, или идентификатор-3 и идентификатор-4 занимают одну и ту же область памяти, результат выполнения оператора STRING (СОБРАТЬ) не определен, даже если они определены одной и той же статьей описания данных (см. п. 6.4,5 настоящей части).
Оператор SUBTRACT (ОТНЯТЬ)
Назначение
Оператор SUBTRACT (ОТНЯТЬ) используется для того, чтобы вычесть одно числовое данное или сумму двух или более числовых данных из одного или более данных и установить значения одного или более данных равными результату.
Общий формат
Формат 1
SUBTRACT f иДентиФикатор-1 j FROM {идентификатор-2
[ литерал-1 J
[ROUNDED]}...
[ON SIZE ERROR повелительный-оператор-1 ]
[NOT ON SIZE ERROR повелительный-оператор-2]
[END-SUBTRACT]
отнять |литерал1
[ идентификатор-1 J
ОТ {идентификатор-2 [ОКРУГЛЯЯ]} . ■ •
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1 ]
[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]
[КОНЕЦ-ОТНЯТЬ]
Формат 2
SUBTRACT І «ектвфикатор-1 ] FROM | »Д<="иф.»<атор.2
[литерал-1 j [литерал-2
GIVING {идентификатор-3 [ROUNDED]} ...
[ON SIZE ERROR повелительный-оператор-1]
[NOT ON SIZE ERROR повелительный-оператор-2]
[END-SUBTRACT]
ОТНЯТЬ литерал-1 1 ОТ < литерал-2 ]
[ идентификатор-1 | ' [ идентификатор-2 J ПОЛУЧАЯ {идентификатор-3 [ОКРУГЛЯЯ]}...
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1]
[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]
[КОНЕЦ-ОТНЯТЬ]
Формат 3
сттптплгт (CORRESPONDING 1 , ,
SUBTRACT {-лхРЕ> 1 идентификатор-1
I СОКК I
FROM, идентификатор-2 [ROUNDED]
Побачили розбіжність з офіційним текстом?