Если вид файла не OUT—FILE, то возбуждается исключение MODE-ERROR.

procedure SKIP PAGE (FILE: in FILE_TYPE);

procedure SKIP PAGE;

Оперирует над файлами вида IN_FILE. Из файла читает и пропускает (игнорирует) все символы и признаки конца строчки до признака конца страницы. Увеличивает текущий номер страницы на единицу, текущие номе­ра столбца и строчки устанавливает равными единице.

Если вид файла не IN—FILE, то возбуждается исключение MODE-ERROR. При попытке прочитать признак конца файла возбужда­ется исключение END-ERROR.

function END_OF_PAGE (FILE: in FILE_TYPE) return BOOLEAN;

function END_OF_PAGE return BOOLEAN;

Оперирует над файлом вида IN_FILE. Возвращает значение TRUE, если очередными элементами файла является последовательность из признаков конца строчки и страницы или если очередным элементом является признак конца файла; в противном случае возвращает значение FALSE.

Если вид файла отличен от IN_FILE, то возбуждается исключение MODE-ERROR.

function END_OF_FILE (FILE: in FILE_TYPE) return BOOLEAN;

function END_OF_FILE return BOOLEAN;

Оперирует над файлом вида IN_FILE. Возвращает значение TRUE, если очередным элементом файла является признак конца файла или последова­тельность из признаков конца строчки, страницы и файла; в противном слу­чае возвращает значение FALSE.

Если вид файла отличен от IN—FILE, то возбуждается исключение MODE-ERROR.

Следующие подпрограммы предназначены для управления текущей по­зицией чтения или записи в файл. Во всех этих подпрограммах в качестве файла по умолчанию используется текущий файл вывода.

procedure SET_COL (FILE: in FILE TYPE;

TO: in POSITIVE-COUNT);

procedure SET-COL (TO: in POSITIVE-COUNT);

Для файла вида OUT_FILE.

Если значение параметра ТО больше текущего номера столбца, то выво­дит пробелы, причем после вывода каждого пробела текущий номер столб­ца увеличивает на единицу. Это повторяется до тех пор, пока текущий но­мер столбца не станет равным значению параметра ТО. Если значение пара­метра ТО было равно текущему номеру столбца, то никаких действий не производит. Если значение параметра ТО меньше текущего номера столбца, то сначала выполняет действия, эквивалентные вызову процедуры NEW—LINE (SPACING = 1), затем выводит (ТО — 1) пробелов, и текущий номер столбца устанавливает равным значению параметра ТО.

Если при ограниченной длине строчки (т. е. LINE_LENGTH для этого файла имеет ненулевое значение) значение параметра ТО оказалось больше LINE_LENGTH, то возбуждается исключение LAYOUT—ERROR.

Для файла вида IN FILE.

Читает и пропускает (игнорирует) отдельные символы, признаки конца строчки и страницы до тех пор, пока номер столбца очередного, подлежаще­го чтению символа, не станет равным значению параметра ТО. Если текущий номер столбца с самого начала равен этому значению, то никаких действий не производит. При передаче каждого символа или признака конца долж­ным образом корректирует текущие номера столбца, строчки и страницы, как при работе процедуры GET (см. разд. 14.3.5). (Короткие строчки бу­дут пропущены целиком, пока не встретится строчка, содержащая символ в указанной позиции от начала строчки.)

При попытке чтения признака конца файла возбуждается исключение END_ERROR.

procedure SET LINE (FILE: in FILETYPE;

TO: in POSITIVE_COUNT);

procedure SET_LINE (TO: in POSITIVE_COUNT);

Для файла вида OUT_FILE.

Если значение параметра ТО больше текущего номера строчки, то эта процедура эквивалентна повторным вызовам NEW_LINE (SPACING = 1) до тех пор, пока текущий номер строчки не станет равным значению пара­метра ТО. Если значение параметра ТО было равно текущему номеру строч­ки, то никаких действий не производит. Если значение параметра ТО мень­ше текущего номера строчки, то результат вызова процедуры эквивалентен вызову NEW_PAGE, за которым следует вызов NEW_LINE с параметром SPACING, равным (ТО — 1).

Если при ограниченной длине страницы (т. е. PAGE-LENGTH для этого файла имеет ненулевое значение) значение параметра ТО оказалось больше PAGE—LENGTH, то возбуждается исключение LAYOUT—ERROR.

Для файла вида IN_FILE.

Результат эквивалентен повторным вызовам процедуры SKIP_LINE (SPACING = 1) до тех пор, пока текущий номер строчки не примет значе­ние параметра ТО. Если текущий номер строчки с самого начала был равен значению параметра ТО, то никаких действий не производит. (Короткие страницы будут пропущены целиком, пока не встретится страница, содер­жащая строчку в указанной позиции от начала страницы.)

При попытке чтения признака конца файла возбуждается исключение END_ERROR.

function COL (FILE: in FILE_TYPE) return POSITIVE-COUNT ;

function COL return POSITIVE-COUNT;

Возвращает текущий номер столбца.

Если этот номер больше значения COUNT'LAST, то возбуждается ис­ключение LAYOUT_ERROR.

function LINE (FILE: in FILE_TYPE) return POSITIVE-COUNT;

function LINE return POSITIVE-COUNT:

Возвращает текущий номер строчки.я.

Если этот номер больше значения COUNT'LAST, то возбуждается ис­ключение LAYOUT-ERROR.

function PAGE (FILE: in FILE„TYPE) return POSITIVE-COUNT;

function PAGE return POSITIVE-COUNT;

Возвращает текущий номер страницы.

Если этот номер больше значения COUNT'LAST, то возбуждается ис­ключение LAYOUT-ERROR.

Номера столбца, строчки или страницы, вообще говоря, могут превы­сить значение COUNT'LAST (в результате ввода или вывода достаточно большого числа символов, строчек или страниц). При этом никакое исклю­чение не возбуждается. Однако при вызове функций COL, LINE или PAGE, если соответствующий номер оказался больше COUNT'LAST, то возбуж­дается исключение LAYOUT-ERROR.

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

  1. П р о ц е д у р ы обмена

В разд. 14.3.5—14.3.10 описаны процедуры GET и PUT для элементов типов CHARACTER, STRING, числового и перечислимого. В данном разделе описаны возможности этих процедур, общие для большинства таких типов. Процедуры GET и PUT для элементов типов CHARACTER и STRING пере­дают отдельные символьные значения, а для числовых и перечислимых.ти­пов передают лексемы.

Первым параметром всех процедур GET и PUT является файл. Если он опущен, то подразумевается, что используется текущий файл (ввода или вывода) по умолчанию. Каждая процедура GET оперирует над файлом ви­да IN_FILE. Каждая процедура PUT оперирует над файлом вида OUT-FILE.

Все процедуры GET и PUT меняют для заданного файла текущие номе­ра столбца, строчки и страницы: каждая передача символа увеличивает на единицу текущий номер столбца. Каждый вывод признака конца строчки устанавливает текущий номер 'столбца равным единице и добавляет едини­цу к текущему номеру строчки. Каждый вывод признака конца страницы устанавливает текущие номера столбца и строчки равными единице и до­бавляет единицу к текущему номеру страницы. При вводе каждый признак конца строчки устанавливает текущий номер столбца равным единице и до­бавляет единицу к текущему номеру строчки; каждый признак конца стра­ницы устанавливает текущие номера столбца и строчки равными единице и добавляет единицу к текущему номеру страницы. Аналогичным образом определяется семантика процедур GET_LINE, PUT_LINE и SET_COL.

Некоторые процедуры GET и PUT для числовых и перечислимых типов имеют параметры, задающие формат, который указывает длины полей; эти параметры принадлежат неотрицательному подтипу FIELD типа INTEGER.

Ввод-вывод значений перечислимых типов использует синтаксис соот­ветствующих лексем. Любая процедура GET для перечислимого типа сна­чала пропускает все ведущие пропуски или признаки концов строчки и страницы; пропуск — это символ пробела или символ горизонтальной та­буляции. Затем символы вводятся до тех пор, пока введенная последова­тельность является лексемой, соответствующей идентификатору или сим­вольному литералу (в частности, ввод прекращается при достижении при­знака конца строчки). Символ или признак конца строчки, вызвавшие пре­кращение ввода, остаются доступными для следующего ввода.

Процедуры GET для числовых типов имеют параметр WIDTH, задаю­щий формат. Если он имеет нулевое значение, то процедура GET выполняет­ся так же, как для перечислимых типов, но вместо синтаксиса литералов перечисления используется синтаксис числовых литералов. При ненулевом значении параметра WIDTH вводится ровно WIDTH символов или, если ра­нее встретился признак конца строчки, то все символы до признака конца строчки; в это число включаются и все ведущие пропуски. Для числовых литералов используется расширенный синтаксис, в котором допускается знак числа (но не пропуски или признаки конца строчки или страницы внутри литерала).

Любая процедура PUT для элемента числового или перечислимого ти­пов выводит значение элемента соответственно как числовой литерал, иден­тификатор или символьный литерал. Перед ними могут быть выведены про­белы, если этого требуют параметры формата WIDTH или FORE (это описа­но ниже), и для отрицательных значений — знак минус; в случае перечисли­мого типа пробелы выводятся не перед литералом, а после него. Если фор­мат в процедуре PUT задает недостаточную ширину, то он игнорируется.

Следующие две ситуации могут возникнуть при выполнении процедуры PUT для числового или перечислимого типов в случае ограниченной длины строчки используемого файла вывода (т. е. длина строчки имеет ненулевое значение). Если число выводимых символов не превышает максимальной длины строчки, но при выводе этих символов, начиная с текущего столб­ца, они не помещаются в текущей строчке, то перед их выводом выполня­ются действия, эквивалентные вызову NEW-.LINE с параметром SPACING, равным единице. Если же число выводимых символов больше максималь­ной длины строчки, то возбуждается исключение LAYOUT_ERROR, при этом символы не выводятся.

Если используемый в процедурах GET, GET_LINE, PUT и PUT_LINE файл не открыт, то возбуждается исключение STATUS .ERROR. Если в про­цедурах GET и GET...LJNE вид используемого файла отличен от IN_FILE или в процедурах PUT и PUT_LINE вид используемого файла отличен от OUT_FILE, то возбуждается исключение MODE—ERROR.

В процедуре GET при попытке пропуска признака конца файла возбуж­дается исключение END_ERROR. Если вся введенная процедурой GET по­следовательность символов не является лексемой соответствующего типа, то возбуждается исключение DATA_ERROR; в частности, оно возбуждает­ся, если не было введено ни одного символа; для числового типа, если был введен знак, то это правило относится к следующему за ним числовому литералу. В случае процедуры PUT, выводящий элемент типа STRING, если длина строки файла недостаточна для вывода заданного элемента, то возбуждается исключение LAYOUT—ERROR.

Примеры:

В примерах этого раздела и в разд. 14.3.7 и 14.3.8 кавычки и строчная буква b не вводятся и не выводятся; они даны только для того, чтобы по­казать расположение и пробелы.

К: INTEGER;

GET(K);

  • - символы на входе, вводимая последовательность, значение К

  • -bb- 12535b — 12535 - 12535

  • -bb 12 535Elb 12_535Е1 125350

  • - bb 12_535Е; 12_535Е (нет) Возбуждено DATA_ERROR

Пример игнорирования параметра ширины:

PUT (ITEM = > - 23, WIDTH => 2); - - ”-23”

  1. В в о д - в ы в о д символов й строк

Для элемента типа CHARACTER определены следующие процедуры:

procedure GET (FILE: in FILE TYPE; ITEM: out CHARACTER);

procedure GET (ITEM: out CHARACTER) ;

В заданном файле ввода процедуры после пропуска признаков коина строчки и страницы читают следующий за ними символ; значение этого сим­вола возвращают параметру ITEM вида out.

При попытке пропустить признак конца файла возбуждается исключе­ние END_ERROR.

procedure PUT (FILE: in FILE-TYPE; ITEM: in CHARACTER);

procedure PUT (ITEM: in CHARACTER);

Если длина строчки заданного файла вывода ограничена (т. е. не равна нулю по соглашению), а текущий номер столбца превышает эту длину, то выполняют действия, эквивалентные вызову процедуры NEW—LINE с пара­метром SPACING, равным единице. Затем в любом случае в файл выводят заданный символ.

Для элемента типа STRING определены следующие процедуры:

procedure GET (FILE: in FILE_TYPE; ITEM: out STRING);

procedure GET (ITEM: out STRING);Определяют длину (число символов) данной строки; затем для после­довательных символов строки соответствующее число раз выполняют опе­рацию GET (в частности, для пустой строки никаких действий не выпол­няют) .

procedure PUT (FILE: in FILE_TYPE; ITEM: in STRING);

procedure PUT (ITEM: in STRING);

Определяют длину (число символов) данной строки; затем для после­довательных символов строки соответствующее число раз выполняют опе­рацию PUT (в частности, для пустой строки никаких действий не выпол­няют) .

procedure GET_LINE (FILE: in FILE_TYPE;ITEM: out STRING; LAST: out NATURAL);

procedure GET_LINE (ITEM: out STRING; LAST: out NATURAL);

Заменяют последовательные символы, содержащиеся в указанной стро­ке, символами, читаемыми из заданного файла. Чтение заканчивается при достижении конца строчки файла; в этом случае выполняют действия, эк­вивалентные вызову процедуры SKIP_LINE с параметром SPACING, рав­ным единице. Чтение также заканчивается и при достижении конца строки, заданной параметром ITEM. Символы, которые не были заменены, остают­ся не определенными.

Если символы прочитаны, то в параметр LAST возвращается индекс последнего замененного символа так, что индексированный компонент ITEM (LAST) — это значение последнего замененного символа (индекс первого замененного символа равен атрибуту ITEM'FIRST). Если не бы­ло прочитано ни одного символа, то в LAST выдается значение индекса на единицу меньше атрибута ITEM' FIRST.

При попытке пропустить признак конца файла возбуждается исключе­ние END_ERROR.

procedure PUT_LINE (FILE: in FILE_TYPE; ITEM: in STRING);

procedure PUT _LINE (ITEM: in STRING);

Вызывают процедуру PUT для заданной строки, затем процедуру NEWSLINE с параметром SPACING, равным единице.

Примечание. Внешние кавычки строкового литерала, являющегося параметром процедуры PUT, не выводятся. Каждый сдвоенный символ кавычки, приведенный внутри такого литерала, выводится как один символ кавычки; это следует из правил для строковых литералов (см. разд. 2.6).

Строка, читаемая процедурой GET или записываемая процедурой PUT, в файле может занимать несколько строчек.

  1. В в о д - в ы в о д для целых типов

Описанные ниже процедуры определены в настраиваемом пакете INTEGER-IO. Он должен быть конкретизирован с соответствующим целым типом (указанным в спецификации параметром настройки NUM),