14.3. ВВОД-ВЫВОД ТЕКСТОВ

В этом разделе описывается пакет TEXT_IO, который обеспечивает возможности ввода и вывода в удобной для читателя форме. Каждый файл читается или записывается последовательно посимвольно, символы последовательно группируются в строчки, последовательность строчек — в страницы. В разд. 14.3.10 приведена спецификация этого пакета.

Возможности управления файлами, описанные в разд. 14.2.1 и 14.2.2, применимы и для текстового ввода-вывода. Однако вместо процедур READ и WRITE используются процедуры GET и PUT, которые осуществляют ввод и вывод значений соответствующих типов для текстовых файлов. Эти значения передаются процедурами PUT и возвращаются процедурами GET через параметр ITEM. Существует несколько совмещенных процедур с такими именами, но с

различными типами параметра ITEM. Процедуры GET анализируют вводимые последовательности символов как лексемы (см. гл. 2) и возвращают соответствующие значения; процедуры PUT выводят данные значения в виде соответствующих лексем. Процедуры GET и PUT могут также вводить и выводить отдельные символы, рассматриваемые не как лексемы, а как значения символьного типа.

Для числового и перечислимого типов параметра ITEM помимо процедур PUT и GET, записывающих в текстовой файл или читающих из него, существуют аналогичные процедуры с параметром типа STRING. Эти процедуры производят точно такие же анализ и формирование последовательности символов, как и подобные им процедуры с файловым параметром.

Для всех процедур GET и PUT, оперирующих над текстовыми файлами, а также для многих других подпрограмм существуют формы как с параметром файлового типа, так и без него. Каждая процедура GET оперирует над файлом ввода; каждая процедура PUT — над файлом вывода. Если файл не задан, то работа производится над файлом ввода по умолчанию или над файлом вывода по умолчанию.

В начале выполнения программы файлами ввода и вывода по умолчанию являются так называемые стандартный файл ввода и стандартный файл вывода. Эти файлы всегда открыты и имеют текущие виды IN_FILE и OUT_FILE соответственно, они связаны с двумя определяемыми реализацией внешними файлами. Существуют процедуры для замены текущего файла ввода по умолчанию и текущего файла вывода по умолчанию.

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

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

Символы строчки пронумерованы начиная с единицы; номер символа называется номером столбца. Для признака конца строчки также определен номер столбца; его значение на единицу больше числа символов в строчке. Строчки страницы и страницы файла пронумерованы аналогично. Текущий номер столбца — это номер следующего (передаваемого) символа или признака конца строчки. Текущий номер строчки — это номер текущей строчки в текущей странице. Текущий номер страницы — это номер текущей страницы в файле. Все эти номера являются значениями подтипа POSITIVE_COUNT типа COUNT (нулевое значение типа COUNT по соглашению используется для специальных целей).

type COUNT is range 0.. определяется-реализацией;subtype POSITIVE_COUNT is COUNT range 1 .. COUNT'LAST;

Для файла вывода могут быть заданы максимальная длина строчки и максимальная длина страницы. Если они заданы, а значение не помещается на текущей строчке, то автоматически до вывода значения будет начата новая строчка; если далее эта новая строчка не может быть размещена на текущей странице, то автоматически до вывода будет начата новая страница. Имеются функции для определения максимальной длины строчки и максимальной длины страницы. После открытия файла вида OUT_FILE оба этих значения равны нулю; это значит, что длина страницы и длина строчки считаются неограниченными. (Следовательно, весь файл вывода состоит из одной строчки, если только не используются подпрограммы явного управления структурой строчек и страниц файла.) Для этих целей служит константа UNBOUNDED.

Ссылки: вид OUT_FILE 14.1, вид IN_FILE 14.1, внешний файл 14.1, последовательный доступ 14.1, процедура GET 14.3.5, процедура PUT 14.3.5, стандартный файл ввода 14.3.2, стандартный файл вывода 14.3.2, текущий файл по умолчанию 14.3.2, тип COUNT 14.3.10, файл 14.1, читать 14.2.2.

14.3.1. УПРАВЛЕНИЕ ФАЙЛАМИ

Для текстовых файлов допустимы только виды IN_FILE и OUT_FILE. К ним также применимы приведенные в разд. 14.2.1 подпрограммы управления внешними файлами и приведенная в разд. 14.2.2 функция END-OF_FILE для последовательного ввода-вывода. Имеется также вариант функции END-OF_FILE, который выдает результат для текущего файла ввода по умолчанию. Указанные процедуры для текстовых файлов характеризуются следующим:

•Процедуры CREATE и OPEN: после открытия файла вида OUT_FILE длина страницы и длина строчки не ограничены (имеют по соглашению значение 0). После открытия файла вида IN_FILE или OUT_FILE текущие номера столбца, строчки и страницы устанавливаются равными единице.

•Процедура CLOSE: если файл имеет текущий вид OUT_FILE, а текущая страница еще не завершена, то результат эквивалентен вызову подпрограммы NEW-PAGE; затем выводится признак конца файла.

•Процедура RESET: если файл имеет текущий вид OUT_FILE, а текущая страница еще не завершена, то результат эквивалентен вызову подпрограммы NEW-PAGE; затем выводится признак конца файла. Если новый вид файла — OUT_FILE, то длина строчки и длина страницы становятся неограниченными. Для всех видов файла текущие номера столбца, строчки и страницы устанавливаются равными единице.

При попытке изменить вид текущего файла ввода по умолчанию или текущего файла вывода по умолчанию процедура RESET возбуждает исключение MODE_ERROR.

Ссылки: вид файла 14.1, вид IN_FILE 14.1, вид OUT_FILE 14.1, внешний файл 14.1, длина страницы 14.3, длина строчки 14.3, исключение MODE_ERROR 14.4, признак конца файла 14.3, процедура CREATE 14.2.1, процедура OPEN 14.2.1, процедура RESET 14.2.1, текущий номер столбца 14.3, текущий номер страницы 14.3, текущий номер строчки 14.3, текущий файл ввода по умолчанию 14.3, файл 14.1, функция END-OF_FILE 14.2.4, 14.3.

14.3.2. ФАЙЛЫ ВВОДА И ВЫВОДА ПО УМОЛЧАНИЮ

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

procedure SET_INPUT(FILE : in FILE.TYPE);

Оперирует над файлом вида IN_FILE. Устанавливает текущим файлом ввода по умолчанию файл, заданный параметром FILE.

Если данный файл не открыт, то возбуждается исключение STATUS_ERROR. Если вид данного файла отличен от IN_FILE, то возбуждается исключение MODE_ERROR.

procedure SET_OUTPUT(FILE : in FILE_TYPE);

Оперирует над файлом вида OUT_FILE. Устанавливает текущим файлом вывода по умолчанию файл, заданный параметром FILE.

Если данный файл не открыт, то возбуждается исключение STATUS_ERROR. Если вид данного файла отличен от OUT_FILE, то возбуждается исключение MODE_ERROR.

function STANDARD_INPUT return FILE_TYPE;

Возвращает стандартный файл ввода (см. 14.3).

function STANDARD_OUTPUT return FILE_7YPE;

Возвращает стандартный файл вывода (см. 14.3).

function CURRENT_INPUT return FILE_TYPE;

Возвращает текущий файл ввода по умолчанию.

function CURRENT_OUTPUT return FILE_TYPE;

Возвращает текущий файл вывода по умолчанию.

Примечание. Стандартные файлы ввода и вывода не могут быть открыты, закрыты, переустановлены и уничтожены, потому что в соответствующих процедурах параметр FILE имеет вид In out.

Ссылки: исключение MODE_ERROR 14.4, исключение STATUS_ERROR 14.4, процедура GET 14.3.5, процедура PUT 14.3.5, текущий файл по умолчанию 14.3, тип FILE_TYPE 14.1, файл по умолчанию 14.3.

14.3.3. СПЕЦИФИКАЦИИ ДЛИН СТРОЧЕК И СТРАНИЦ

Описанные в этом разделе подпрограммы связаны со структурой строчек и страниц файла вида OUT_FILE. Они оперируют либо над файлом, заданным первым параметром, либо при отсутствии такого параметра над текущим файлом вывода по умолчанию. Эти подпрограммы служат для вывода текста с заданными максимальными длинами строчки или страницы. В этих случаях признаки конца строчки и страницы выводятся неявно и автоматически, по мере необходимости. Когда длины строчки и страницы не ограничены (т.е. когда они имеют по соглашению значение нуль), как в случае заново открытого файла, новые строчки или страницы можно начать лишь в результате явного вызова соответствующих подпрограмм.

Во всех случаях, если заданный файл не открыт, то возбуждается исключение STATUS_ERROR; если вид этого файла отличен от OUT_FILE, то возбуждается исключение MODE_ERROR.

procedure SET_LINE_LENGTH(FILE : in FILE_TYPE; TO : in COUNT);procedure SET_LINE_LENGTH(TO   : in COUNT);

Устанавливает максимальную длину строчки заданного файла вывода равной числу символов, задаваемому значением параметра ТО. Нулевое значение параметра ТО задает неограниченную длину строчки.

Если заданное значение длины строчки не подходит для связанного с ней внешнего файла, то возбуждается исключение USE_ERROR.

procedure SET_PAGE_LENGTH <FILE : in FILE.7YPE; TO : in COUNT);procedure SET_PAGE_LENGTH (TO : in COUNT);

Устанавливает максимальную длину страницы заданного файла вывода равной числу строчек, задаваемому значением параметра ТО. Нулевое значение параметра ТО задает неограниченную длину страницы.

Если данное значение длины страницы не подходит для связанного с данным внешним файлом, то возбуждается исключение USE_ERROR.

function LINE_LENGTH(FILE : in FILE_TYPE) return COUNT;function LINE_LENGTH return COUNT;

Возвращает максимальную длину строчки, установленную для заданного файла вывода, или нуль, если длина строчки не ограничена.

function PAGE_LENGTH(FILE : in FILE_JYPE) return COUNT;function PAGE_LENGTH return COUNT;

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

Ссылки: вид OUT_FILE 14.4.1, внешний файл 14.1, длина страницы 14.3, длина строчки 14.3, исключение MODE_ERROR 14.4, исключение STATUS_ERROR 14.4, исключение USE_ERROR 14.4, максимальная длина страницы 14.3, максимальная длина строчки 14.3, неограниченная длина страницы 14.3, открытый файл 14.1, признак конца строчки 14.3, страница 14.3, строчка 14.3, текущий файл вывода по умолчанию 14.3, тип COUNT 14.3, тип FILE_TYPE 14.1, файл 14.1.

14.3.4. ОПЕРАЦИИ НАД СТОЛБЦАМИ, СТРОЧКАМИ И СТРАНИЦАМИ

Описанные в этом разделе подпрограммы предназначены для явного управления структурой строчек и страниц файла; они оперируют либо над файлом, заданным первым параметром, либо при отсутствии такого параметра-файла над текущим файлом (ввода или вывода) по умолчанию. Если используемый в этих подпрограммах файл не открыт, то возбуждается исключение STATUS_ERROR.

procedure SKIP_LINE(FILE     : in FILE_TYPE; SPACING : in POSITIVE_COUNT := 1);procedure SKIP_LINE(SPACING : in POSITIVE_COUNT := 1);

Оперирует над файлом вида OUT_FILE.

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

Если SPACING больше единицы, то указанные действия повторяются SPACING раз.

Если вид файла не OUT_FILE, то возбуждается исключение MODE_ERROR.

procedure NEW_LINE(FILE : in FILE_TYPE; SPACING : in POSITIVE_COUNT := 1);procedure NEW_LINE(SPACING : in POSITIVE_COUNT := 1);

Оперирует над файлом вида IN_FILE.

Если SPACING равен единице, то считывает из файла и пропускает (игнорирует) все символы до признака конца строчки, а текущий номер столбца устанавливает равным единице. Если непосредственно за признаком конца строчки не следует признак конца страницы, то увеличивает текущий номер строчки на единицу. В противном случае, когда за признаком конца строчки непосредственно следует признак конца страницы, пропускает признак конца страницы, увеличивает текущий номер страницы на единицу, а текущий номер строчки устанавливает равным единице.

Если SPACING больше единицы, указанные действия повторяются SPACING раз.

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

function END_OF_LINE(FILE : in FILE_TYPE) return BOOLEAN;function END_OF_LINE return BOOLEAN;

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

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

procedure NEW_PAGE(FILE : in FILE_TYPE);procedure NEW_PAGE;

Оперирует над файлом вида OUT_FILE. Если текущая строчка не завершена или текущая страница пустая (т.е. текущие номера строчки или столбца оба равны единице), то выводит признак конца строчки. Затем выводит признак конца страницы, который завершает текущую страницу. Увеличивает номер текущей страницы на единицу, а текущие номера столбца и строчки устанавливает равными единице.

Если вид файла не 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_OP_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 FILE_TYPE; 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.

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

Ссыпки: вид IN_FILE 14.1, длина страницы 14.3, исключение END_ERROR 14.4, исключение LAYOUT_ERROR 14.4, исключение MODE_ERROR 14.4, исключение STATUS_ERROR 14.4, максимальная длина страницы 14.3, номер строчки 14.3, открытый файл 14.1, признак конца страницы 14.3, признак конца строчки 14.3, признак конца файла 14.3, процедура GET 14.3.5, страница 14.3, строчка 14.3, текущий номер столбца 14.3, текущий номер страницы 14.3, текущий номер строчки 14.3, текущий файл по умолчанию 14.3, тип POSITIVE_COUNT 14.3, файл 14.1.

14.3.5. ПРОЦЕДУРЫ ОБМЕНА

В разд. 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_LINE вид используемого файла отличен от IN_LINE или в процедурах PUT и PUT_LINE вид используемого файла отличен от OUT_FILE, то возбуждается исключение MODE_ERROR.

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

Примеры:

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

N : INTEGER;   ...GET(N);

-— символы на входе

вводимая последовательность

значение N

bb-12535Ь

-12535

-12535

bb12_535Е1Ь

12_535Е1

125350

bb12_535Е;

12535Е

(нет) DATA_ERROR Возбуждено

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

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

Ссылки- вид 14.1, вид файла IN_FILE 14.1, вид файла OUT_FILE 14.1, исключение DATA_ERROR 14.4, исключение END_ERROR 14.4, исключение LAYOUT_ERROR 14.4, исключение MODE_ERROR 14.4, исключение STATUS_ERROR 14.4, максимальная длина строчки 14.3, номер столбца 14.3, номер страницы 14.3, номер строчки 14.3, параметр FORE 14.3.8, параметр WIDTH 143.5, 14.3.7, 14,3.9, признак конца страницы 14.1, признак конца строчки 14.1, пропуск 14.3.9, просмотреть 14.3.7, 14.3.8, 14.3.9, процедура GET 14.3.6, 14.3.7, 14.3.8, 14.3.9, процедура NEW_LINE 14.3.4, процедура PUT 14.3.6, 14.3.7, 14.3.8, 14.3.9, текущий файл по умолчанию 14.3, файл 14.1.

14.3.6. ВВОД-ВЫВОД СИМВОЛОВ И СТРОК

Для элемента типа 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 для заданной строки, затем процедуру NEW_LINE с параметром SPACING, равным единице.

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

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

Ссылки: длина строки 14.3, длина строчки 14.3, 14.3.5, исключение END_ERROR 14.4, признак конца страницы 14.3, процедура GET 14.3.5, процедура NEW_LINE 14.3.4, процедура PUT 14.3.4, строчка 14.3, текущий номер столбца 14.3, файл 14.1.

14.3.7. ВВОД-ВЫВОД ДЛЯ ЦЕЛЫХ ТИПОВ

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

Значения выводятся в виде десятичных литералов или литералов с основанием, без подчеркиваний и порядка, с предшествующим знаком минус для отрицательных чисел. Формат, определяющий ширину поля (включая ведущие пробелы и знак минус), может быть задан необязательным параметром WIDTH. Его значение принадлежит неотрицательному целому подтипу FIELD. Значения основания принадлежат целому подтипу NUMBER-BASE.

subtype NUMBER_BASE is INTEGER range 2 .. 16;

В процедурах вывода могут использоваться ширина поля и основание по умолчанию; они задаются переменными, описанными в настраиваемом пакете INTEGER_IO:

DEFAULT_WIDTH : FIELD := NUM_WIDTH;DEFAULT_BASE   : NUMBER_BASE ;= 10;

Определены следующие процедуры:

procedure GET(FILE : In FILE_TYPE; ITEM : out NUM; WIDTH : in FIELD := 0);procedure GET(ITEM : out NUM; WIDTH : in FIELD := 0);

При нулевом значении параметра WIDTH пропускают все ведущие пропуски, признаки конца строчки и страницы, читают знак плюс или минус (если он есть), затем производят чтение в соответствии с синтаксисом целого литерала (он может быть литералом с основанием). При нулевом значении WIDTH вводят ровно WIDTH символов, или если раньше встретится признак конца строки, то вводят лишь символы до этого признака конца (возможно, ни одного); в это количество включаются и все ведущие пропуски.

В параметр ITEM типа NUM возвращают значение, соответствующее введенной последовательности.

Если введенная последовательность не соответствует правилам синтаксиса или если полученное значение не принадлежит подтипу NUM, то возбуждается исключение DATA_ERROR.

procedure PUT(FILE  :    in FILE_TYPE;              ITEM  :    in NUM;              WIDTH :    in FIELD := DEFAULT_WIDTH;              BASE  :    in NUMBER_BASE := DEFAULT_BASE);procedure PUT(ITEM  :    in NUM;              WIDTH :    in FIELD := DEFAULT_WIDTH;              BASE  :    in NUMBER_BASE := DEFAULT_BASE);

Значение параметра ITEM выводят в виде целого литерала без подчеркиваний, порядка и ведущих нулей (если значение равно нулю, выводят один нуль), с предшествующим знаком минус, если значение отрицательное.

Если число символов выводимой последовательности меньше значения WIDTH, то она дополняется ведущими пробелами.

Если параметр BASE (заданный явно указанным значением или переменной DEFAULT_BASE) имеет значение десять, то числа выводятся по синтаксису десятичного литерала, в противном случае — по синтаксису литерала с основанием и всеми прописными буквами.

procedure GET(FROM : in STRING; ITEM : out NUM; LAST : out POSITIVE);

Читает с начала строки, заданной параметром FROM, целое значение по тем же правилам, что и процедура GET, которая читает целое значение из файла; при этом рассматривает конец строки как признак конца файла. Через параметр ITEM возвращает значение типа NUM, соответствующее введенной последовательности. Через параметр LAST возвращает значение индекса, соответствующее последнему читаемому символу (следовательно, этот символ имеет значение индексированной компоненты FROM(LAST)).

Если введенная последовательность не соответствует правилам синтаксиса или если полученное значение не принадлежит подтипу NUM, то возбуждается исключение DATA_ERROR.

procedure PUT(TO   :   out STRING;              ITEM :    in NUM;              BASE :    in NUMBER_BASE := DEFAULT_BASE);

Через параметр ТО выводит значение параметра ITEM по тем же правилам, что и при выводе в файл; в качестве значения параметра WIDTH используется длина указанной строки.

Примеры:

package INT_IO is new INTEGER_IO(SMALUNT); use INT_IO;-— в результате конкретизации-— получается формат по умолчанию:—— DEFAULT_WIDTH = 4, DEFAULT_BASE = 10PUT(126);                              -- "b126" PUT(-126, 7);                          -- "ЬЬЬ-126" PUT(126, WIDTH => 13, BASE => 2);      -- "bbb2#1111110#"

Ссылки: десятичный литерал 2.4.1, исключение DATA_ERROR 14.4, исключение LAYOUT_ERROR 14.4, литерал с основанием 2.4.2, пакет INTEGER_IO 14.3.10, параметр WIDTH 14.3.5, подтип FIELD 14.3.5, признак конца строчки 14.3, пропуск 14.3.5, просмотреть 14.3.5, процедура GET 14.3.5, процедура PUT 14.3.5, тип FILE_TYPE 14.1, целый литерал 2.4.

14.3.8. ВВОД-ВЫВОД ДЛЯ ВЕЩЕСТВЕННЫХ ТИПОВ

Следующие процедуры определены в настраиваемых пакетах FLOAT_IO и FIXED_IO, которые должны быть конкретизованы с соответствующим плавающим или фиксированным типом (указанным в спецификации параметром NUM).

Значения выводятся как десятичные литералы без подчеркиваний. Формат каждого выводимого значения состоит из поля FORE, десятичной точки, поля AFT, а также (при ненулевом значении параметра ЕХР) буквы Е и поля ЕХР. Таким образом, возможны два формата:

FORE . AFT и FORE . AFT E ЕХР

без всяких пробелов между этими полями. Поле FORE может включать предшествующие пробелы и знак минус для отрицательных значений. Поле AFT состоит из одних лишь десятичных цифр (оно может оканчиваться нулями). Поле ЕХР состоит из знака (плюс или минус) и порядка (возможно, с предшествующими нулями).

Для плавающих типов длины этих полей по умолчанию определены переменными, описанными в пакете FLOAT_IO:

DEFAULT_FORE : FIELD := 2; DEFAULT_APT  : FIELD := NUM'DIGITS-1; DEFAULT_EXP  : FIELD := 3;

Для фиксированных типов длины по умолчанию для этих полей задаются переменными, описанными в пакете FIXED_IO:

DEFAULT_FORE : FIELD := NUM'FORE;DEFAULT_AFT  : FIELD := NUM'AFT; DEFAULT_EXP  : FIELD := 0;

Определены следующие процедуры:

procedure GET(FILE : in FILE_TYPE; ITEM : out NUM; WIDTH : in FIELD := 0);procedure GET(ITEM : out NUM; WIDTH   : in FIELD := 0);

При нулевом значении параметра WIDTH опускают все ведущие пропуски, признак конца строчки или признак конца страницы, читают знак плюс или минус (если он есть); затем производят чтение в соответствии с синтаксисом вещественного литерала (он может быть литералом с основанием). При ненулевом значении параметра WIDTH вводят или ровно WIDTH символов, или, если раньше встретился признак конца строчки, лишь символы, читаемые до этого признака конца (возможно, ни одного символа); в это количество включаются и все предшествующие пропуски.

Через параметр ITEM возвращают значение типа NUM, соответствующее введенной последовательности.

Если введенная последовательность не удовлетворяет требованиям синтаксиса или если полученное значение не принадлежит подтипу NUM, то возбуждается исключение DATA_ERROR.

procedure PUT(FILE : in FILE_TYPE;              ITEM : in NUM;              FORE : in FIELD := DEFAULT_FORE;              AFT  : in FIELD := DEFAULT_AFT;              EXP  : in FIELD := DEFAULT_EXP);procedure PUT(ITEM : in NUM;              FORE : in FIELD := DEFAULT_FORE;              AFT  : in FIELD := DEFAULT_AFT;              EXP  : in FIELD := DEFAULT_EXP);

Выводят значение параметра ITEM в виде десятичного литерала в формате, определяемом параметрами FORE, AFT и ЕХР. Если значение ITEM отрицательное, то в целую часть включен знак минус. При нулевом значении параметра ЕХР целая часть представляется таким количеством цифр, которое требуется для представления целой части значения ITEM. При необходимости значение FORE игнорируется. Если в значении ITEM нет целой части, то целая часть представляется цифрой 0.

Если значение ЕХР больше нуля, то целая часть представляется одной цифрой, отличной от нуля, за исключением случая, когда значение ITEM равно 0.0.

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

При нулевом значении ЕХР число выводится без порядка. Если ЕХР больше нуля, то при . выводе порядка выводится столько цифр, сколько необходимо для представления порядка значения ITEM (для представления целой части этого значения используется один символ);первым символом является знак плюс или минус. Если для представления порядка, включая знак, используется менее ЕХР символов, то это представление дополняется до требуемого количества символов ведущими нулями. Для значения ITEM, равного 0.0, порядок равен нулю.

procedure GET(FROM : in STRING; ITEM : out NUM; LAST : out POSITIVE);

Читает с начала строки, заданной параметром FROM, вещественное значение по тем же правилам, что и процедура GET, читающая вещественное значение из файла; при этом конец строки рассматривается как признак конца файла. Через параметр ITEM возвращает значение типа NUM, соответствующее введенной последовательности. Через параметр LAST возвращает значение индекса, соответствующее последнему читаемому символу (следовательно, этот символ имеет значение индексируемой компоненты FROM (LAST)).

Если введенная последовательность не соответствует правилам синтаксиса или если полученное значение не принадлежит подтипу NUM, то возбуждает исключение DATA_ERROR.

procedure PUT(TO   : out STRING;              ITEM : in NUM;              AFT  : in FIELD   := DEFAULT_AFT;              EXP  : in INTEGER := DEFAULT_EXP);

Через параметр ТО выводит значение параметра ITEM по тем же правилам, что и при выводе в файл; при этом в качестве FORE использует такое значение, чтобы общее число выводимых символов, включая предшествующие пробелы, соответствовало длине строки параметра ТО.

Примеры:

package REAL_IO is new FLOAT_IO(REAL); use REAL_IO;-- в "результате конкретизации -- получается формат по умолчанию: DEFAULTEXP = 3X : REAL :=-123.4567; -— 8 цифр (СМ. 3.5.7)PUT(X); --формат по умолчанию             "-1.2345670Е+02" PUT(X, FORE => 5, AFT => 3, ЕХР => 2); -- "ЬЬЬ-1.235Е+2" PUT(X, 5, 3, 0);                       -- "Ь-123.457"

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

Ссылки: атрибут AFT 3.5.10, атрибут FORE 3.5.10, вещественный литерал 2.4, десятичный литерал 2.4.1, признак конца строчки 14.3.5, исключение DATA_ERROR 14.4, исключение LAYOUT_ERROR 14.4, литерал с основанием 2.4.2, пакет FIXED_IO 14.3.10, пакет FLOAT_IO 14.3.10, параметр WIDTH 14.3.5, подтип FIELD 14.3.5, пропуск 14.3.5, просмотреть 14.3.5, процедура GET 14.3.5, процедура PUT 14.3.5, тип FILE_TYPE 14.1.

14.3.9. ВВОД-ВЫВОД ДЛЯ ПЕРЕЧИСЛИМЫХ ТИПОВ

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

При выводе значений для представления идентификаторов используются либо строчные, либо прописные буквы. Это задается параметром SET, который принадлежит перечислимому типу TYPE-SET:

type TYPE_SET is (LOWER_CASE, UPPER_CASE);

Формат (в который включаются и заключительные пробелы) может быть задан необязательным параметром ширины поля. Ширина поля по умолчанию и представление букв задаются описанными в настраиваемом пакете ENUMERATION_IO переменными:

DEFAULT_WIDTH   : FIELD := 0;DEFAULT_SETTING : TYPE_SET := UPPER_CASE;

Определены следующие процедуры:

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

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

Если введенная последовательность не удовлетворяет правилам синтаксиса или если идентификатор или символьный литерал не соответствуют никакому значению подтипа ENUM, то возбуждается исключение DATA_ERROR.

procedure PUT(FILE  : in FILE_TYPE;              ITEM  : in ENUM;              WIDTH : in FIELD := DEFAULT_WIDTH;              SET   : in TYPE_SET := DEFAULT_SETTING);procedure PUT(ITEM  :in ENUM;              WIDTH : in FIELD := DEFAULT_WIDTH;              SET   : in TYPE_SET := DEFAULT_SETTING);

Выводят значение параметра ITEM как литерал перечисления (либо идентификатор, либо символьный литерал). Необязательный параметр SET указывает, какие буквы — строчные или прописные — следует использовать для представления идентификаторов (для символьных литералов он игнорируется). Если число выводимых символов меньше значения параметра WIDTH, то после них выводятся пробелы, дополняющие число символов до WIDTH.

procedure GET(FROM : in STRING; ITEM : out ENUM; LAST : out POSITIVE);

Читает с начала строки, заданной параметром FROM, значение перечислимого типа по тем же правилам, что и процедура GET, читающая значение перечислимого типа из файла;при этом конец строки рассматривается как признак конца файла. Через параметр ITEM возвращает значение типа ENUM, соответствующее введенной последовательности. Через параметр LAST возвращает значение индекса, соответствующее последнему читаемому символу (следовательно, этот символ имеет значение индексируемой компоненты FROM (LAST)).

Если введенная последовательность не соответствует правилам синтаксиса или если идентификатор или символьный литерал не соответствуют никакому значению подтипа ENUM, то возбуждает исключение DATA_ERROR.

procedure PUT(TO   : out STRING;              ITEM : in ENUM;              SET  : in TYPE_SET := DEFAULT_SETTING);

Выводит в строку, заданную параметром ТО, значение параметра ITEM по тем же правилам, что и при выводе в файл; в качестве значения параметра WIDTH используется длина указанной строки.

Хотя спецификация пакета ENUMERATION_IO допускает конкретизацию с соответствующим целым типом, это не является целью данного пакета; язык не определяет результата такой конкретизации.

Примечание. Процедуры PUT для символов и для перечислимых значений имеют определенные различия:

TEXT_IO.PUT('A');   -— выводит символ Аpackage CHAR_IO is new TEXT_IO.ENUMERATION_IO(CHARACTER);CHAR_IO.PUT('A');  -— выводит символ 'А', заключенный в одинарные кавычки

Тип BOOLEAN является перечислимым типом, поэтому пакет ENUMERATION_IO может быть настроен на этот тип.

Ссылки: исключение DATA_ERROR 14.4, пакет ENUMERATION_IO 14.3.10, параметр WIDTH 14.3.5, подтип FIELD 14.3.5, признак конца строчки 14.3.5, пропуск 14.3.5, просмотреть 14.3.5, процедура GET 14.3.5, процедура PUT 14.3.5, тип FILE_TYPE 14.1.

14.3.10. СПЕЦИФИКАЦИЯ ПАКЕТА ВВОДА-ВЫВОДА ТЕКСТА

with IO_EXCEPTIONS;package TEXT_IO is    type FILE_TYPE is limited private;    type FILE_MODE is (IN_FILE, OUT_FILE);     type COUNT is range 0 .. определяется_реапизацией;   subtype POSITIVE_COUNT is COUNT range 1 .. COUNT'LAST;   UNBOUNDED : constant COUNT := 0; -- длина строчки и страницы    subtype FIELD       is INTEGER range 0 .. определяется_реапизацией;   subtype NUMBER_BASE is INTEGER range 2 .. 16;    type TYPE_SET is (LOWER_CASE, UPPER_CASE);    -- управление файлами    procedure CREATE (FILE : in out FILE_TYPE;                     MODE : in FILE_MODE := OUT_FILE;                     NAME : in STRING    := "";                     FORM : in STRING    := "");    procedure OPEN   (FILE : in out FILE_TYPE;                     MODE : in FILE_MODE;                     NAME : in STRING;                     FORM : in STRING := "");    procedure CLOSE  (FILE : in out FILE_TYPE);   procedure DELETE (FILE : in out FILE_TYPE);   procedure RESET  (FILE : in out FILE_TYPE; MODE : in FILE_MODE);   procedure RESET  (FILE : in out FILE_TYPE);    function  MODE   (FILE : in FILE_TYPE) return FILE_MODE;   function  NAME   (FILE : in FILE_TYPE) return STRING;   function  FORM   (FILE : in FILE_TYPE) return STRING;    function  IS_OPEN(FILE : in FILE_TYPE) return BOOLEAN;    -- управление файлами ввода и вывода по умолчанию   procedure SET_INPUT (FILE : in FILE_TYPE);   procedure SET_OUTPUT(FILE : in FILE_TYPE);     function STANDARD_INPUT  return FILE_TYPE;   function STANDARD_OUTPUT return FILE_TYPE;    function CURRENT_INPUT   return FILE_TYPE;   function CURRENT_OUTPUT  return FILE_TYPE;                                        -- спецификация длин строчки и страницы   procedure SET_LINE_LENGTH(FILE : in FILE_TYPE; TO : in COUNT);   procedure SET_LINE_LENGTH(TO : in COUNT);     procedure SET_PAGE_LENGTH(FILE : in FILE_TYPE; TO : in COUNT);   procedure SET_PAGE_LENGTH(TO : in COUNT);    function  LINE_LENGTH(FILE : in FILE_TYPE) return COUNT;   function  LINE_LENGTH return COUNT;    function  PAGE_LENGTH(FILE : in FILE_TYPE) return COUNT;   function  PAGE_LENGTH return COUNT;    -- управление колонкой, строчкой и страницей   procedure NEW_LINE   (FILE : in FILE_TYPE; SPACING : in POSITIVE_COUNT := 1);   procedure NEW_LINE   (SPACING : in POSITIVE_COUNT := 1);   procedure SKIP_LINE  (FILE : in FILE_TYPE; SPACING : in POSITIVE_COUNT := 1);   procedure SKIP_LINE  (SPACING : in POSITIVE_COUNT := 1);   function  END_OF_LINE(FILE : in FILE_TYPE) return BOOLEAN;   function  END_OF_LINE return BOOLEAN;    procedure NEW_PAGE   (FILE : in FILE_TYPE);   procedure NEW_PAGE;    procedure SKIP_PAGE  (FILE : in FILE_TYPE);   procedure SKIP_PAGE;    function  END_OF_PAGE(FILE : in FILE_TYPE) return BOOLEAN;   function  END_OF_PAGE return BOOLEAN;    function  END_OF_FILE(FILE : in FILE_TYPE) return BOOLEAN;   function  END_OF_FILE return BOOLEAN;     procedure SET_COL (FILE : in FILE_TYPE; TO : in POSITIVE_COUNT);   procedure SET_COL (TO   : in POSITIVE_COUNT);    procedure SET_LINE(FILE : in FILE_TYPE; TO : in POSITIVE_COUNT);   procedure SET_LINE(TO   : in POSITIVE_COUNT);     function COL (FILE : in FILE_TYPE) return POSITIVE_COUNT;   function COL  return POSITIVE_COUNT;    function LINE(FILE : in FILE_TYPE) return POSITIVE_COUNT;   function LINE return POSITIVE_COUNT;    function PAGE(FILE : in FILE_TYPE) return POSITIVE_COUNT;   function PAGE return POSITIVE_COUNT;                                              -- символьный ввод-вывод   procedure GET(FILE : in  FILE_TYPE; ITEM : out CHARACTER);   procedure GET(ITEM : out CHARACTER);   procedure PUT(FILE : in  FILE_TYPE; ITEM : in CHARACTER);   procedure PUT(ITEM : in  CHARACTER);    -- строковый ввод-вывод   procedure GET(FILE : in  FILE_TYPE; ITEM : out STRING);   procedure GET(ITEM : out STRING);   procedure PUT(FILE : in  FILE_TYPE; ITEM : in STRING);   procedure PUT(ITEM : in  STRING);    procedure GET_LINE(FILE : in  FILE_TYPE; ITEM : out STRING; LAST :     out NATURAL);   procedure GET_LINE(ITEM : out STRING; LAST : out NATURAL);   procedure PUT_LINE(FILE : in  FILE_TYPE; ITEM : in STRING);   procedure PUT_LINE(ITEM : in  STRING);    -- настраиваемый пакет для ввода-вывода целых типов   generic      type NUM is range <>;   package INTEGER_IO is       DEFAULT_WIDTH : FIELD := NUM'WIDTH;      DEFAULT_BASE  : NUMBER_BASE := 10;       procedure GET(FILE : in  FILE_TYPE; ITEM : out NUM; WIDTH : in FIELD := 0);      procedure GET(ITEM : out NUM; WIDTH : in FIELD := 0);      procedure PUT(FILE  : in FILE_TYPE;                    ITEM  : in NUM;                    WIDTH : in FIELD := DEFAULT_WIDTH;                    BASE  : in NUMBER_BASE := DEFAULT_BASE);      procedure PUT(ITEM  : in NUM;                    WIDTH : in FIELD := DEFAULT_WIDTH;                    BASE  : in NUMBER_BASE := DEFAULT_BASE);       procedure GET(FROM : in  STRING; ITEM : out NUM; LAST : out POSITIVE);      procedure PUT(TO   : out STRING;                    ITEM : in NUM;                    BASE : in NUMBER_BASE := DEFAULT_BASE);  end INTEGER_IO;                                                                         -- настраиваемый пакет для ввода-вывода вещественных типов   generic      type NUM is digits <>;   package FLOAT_IO is       DEFAULT_FORE : FIELD := 2;      DEFAULT_AFT  : FIELD := NUM'DIGITS-1;      DEFAULT_EXP  : FIELD := 3;       procedure GET(FILE : in FILE_TYPE; ITEM : out NUM; WIDTH : in FIELD := 0);      procedure GET(ITEM : out NUM; WIDTH : in FIELD := 0);       procedure PUT(FILE : in FILE_TYPE;                    ITEM : in NUM;                    FORE : in FIELD := DEFAULT_FORE;                    AFT  : in FIELD := DEFAULT_AFT;                    EXP  : in FIELD := DEFAULT_EXP);      procedure PUT(ITEM : in NUM;                    FORE : in FIELD := DEFAULT_FORE;                    AFT  : in FIELD := DEFAULT_AFT;                    EXP  : in FIELD := DEFAULT_EXP);      procedure GET(FROM : in STRING; ITEM : out NUM; LAST : out POSITIVE);       procedure PUT(TO   : out STRING;                    ITEM : in NUM;                    AFT  : in FIELD := DEFAULT_AFT;                    EXP  : in FIELD := DEFAULT_EXP);   end FLOAT_IO;    generic      type NUM is delta <>;   package FIXED_IO is       DEFAULT_FORE : FIELD := NUM'FORE;      DEFAULT_AFT  : FIELD := NUM'AFT;      DEFAULT_EXP  : FIELD := 0;       procedure GET(FILE : in FILE_TYPE; ITEM : out NUM; WIDTH : in FIELD := 0);      procedure GET(ITEM : out NUM; WIDTH : in FIELD := 0);       procedure PUT(FILE : in FILE_TYPE;                    ITEM : in NUM;                    FORE : in FIELD := DEFAULT_FORE;                    AFT  : in FIELD := DEFAULT_AFT;                    EXP  : in FIELD := DEFAULT_EXP);      procedure PUT(ITEM : in NUM;                    FORE : in FIELD := DEFAULT_FORE;                       AFT  : in FIELD := DEFAULT_AFT;                    EXP  : in FIELD := DEFAULT_EXP);       procedure GET(FROM : in  STRING; ITEM : out NUM; LAST : out POSITIVE);      procedure PUT(TO   : out STRING;                    ITEM : in NUM;                    AFT  : in FIELD := DEFAULT_AFT;                      EXP  : in FIELD := DEFAULT_EXP);    end FIXED_IO;                                                                   -- настраиваемый пакет для ввода-вывода перечислимых типов   generic      type ENUM is (<>);   package ENUMERATION_IO is       DEFAULT_WIDTH   : FIELD := 0;      DEFAULT_SETTING : TYPE_SET := UPPER_CASE;       procedure GET(FILE  : in FILE_TYPE; ITEM : out ENUM);      procedure GET(ITEM  : out ENUM);       procedure PUT(FILE  : in FILE_TYPE;                    ITEM  : in ENUM;                    WIDTH : in FIELD    := DEFAULT_WIDTH;                    SET   : in TYPE_SET := DEFAULT_SETTING);      procedure PUT(ITEM  : in ENUM;                    WIDTH : in FIELD    := DEFAULT_WIDTH;                    SET   : in TYPE_SET := DEFAULT_SETTING);       procedure GET(FROM : in  STRING; ITEM : out ENUM; LAST : out POSITIVE);      procedure PUT(TO   : out STRING;                    ITEM : in  ENUM;                    SET  : in  TYPE_SET := DEFAULT_SETTING);   end ENUMERATION_IO;    -- исключения   STATUS_ERROR : exception renames IO_EXCEPTIONS.STATUS_ERROR;    MODE_ERROR   : exception renames IO_EXCEPTIONS.MODE_ERROR;   NAME_ERROR   : exception renames IO_EXCEPTIONS.NAME_ERROR;   USE_ERROR    : exception renames IO_EXCEPTIONS.USE_ERROR;   DEVICE_ERROR : exception renames IO_EXCEPTIONS.DEVICE_ERROR;   END_ERROR    : exception renames IO_EXCEPTIONS.END_ERROR;   DATA_ERROR   : exception renames IO_EXCEPTIONS.DATA_ERROR;   LAYOUT_ERROR : exception renames IO_EXCEPTIONS.LAYOUT_ERROR; private   -- определяется реализациейend TEXT_IO;