Модуль In Справочный лист

Модуль In предоставляет набор основных процедур для форматированного ввода литер, последовательностей литер, чисел и имён. Он предполагает наличие стандартного потока ввода с текущей позицией, которая может быть сброшена в начало потока (но не всегда это возможно в Linux/Unix или Windows).

Модуль In как в Oakwood Guidlines for Oberon-2 Compiler Developers, 1995.

Со следующими изменениями:

LongInt, Int, Int16 сначала читают и распознают знаки минус.

Char читает 2-байтовую литеру. В Linux он декодирует вводимые данные как UTF-8. В Windows используется вызов ReadConsoleW из WinAPI если консоль подключена, в противном случае используется ReadFile и ввод автоматически декодируется из UTF-8.

Open не может перематывать.

Дополнительные процедуры: Line, HugeInt, Int16.

Постоянные

Этот раздел пуст.

Типы

Кодовые страницы, значения cp

BYTE = UBYTE;

8-битное беззнаковое целое, 0..255.

Переменные

Done: BOOLEAN;

TRUE после каждого Open, FALSE после первой ошибки.

Done выражает успешность операции ввода. Если Done равно TRUE после операции ввода, то операция была успешной и её результат считается действительным. Неудачная операция ввода устанавливает значение Done в FALSE; оно остается FALSE до следующего вызова Open. В частности, Done устанавливается в FALSE, если была предпринята попытка чтения за пределы конца входного потока.

Процедуры

Инициализация

PROCEDURE Open;

Open устанавливает текущую позицию в начало входного потока. Done указывает, была ли операция успешной.

Обратите внимание, что на Windows или Linux/Unix перемотка может быть невозможна. Кроме того, на этих ОС нет строгого требования вызывать Open перед любой другой операцией.

Операции ввода

PROCEDURE Byte (VAR x: BYTE);

Помещает в x байт в текущей позиции

PROCEDURE Char (VAR ch: CHAR);

Помещает в ch литеру в текущей позиции. Может считывать от 1 до 4 байт при декодировании из UTF-8 (в Linux/Unix и в Windows, если ввод перенаправляется).

PROCEDURE HugeInt (VAR h: LONGINT);

Возвращает 64-битное целое число в текущей позиции согласно формату:

IntConst = [-] (digit {digit} | digit {hexDigit} "H").

PROCEDURE Int (VAR i: INTEGER);

Возвращает 32-битное целое число так же, как это делает HugeInt

PROCEDURE Int16 (VAR i: SHORTINT);

Возвращает 16-битное целое число так же, как это делает HugeInt

PROCEDURE Line (VAR line: ARRAY OF CHAR);

Считывает строку литер до первого CR, LF или конца файла

PROCEDURE LongInt (VAR i: INTEGER);

Псевдоним для Int. Делает то же самое.

PROCEDURE LongReal (VAR x: REAL);

Считывает и помещает в x 64-битное вещественное число (LONGREAL) согласно формату:

["-"] digit {digit} [{digit} ["E" ("+" | "-") digit {digit}]].

PROCEDURE Name (VAR s: ARRAY OF CHAR);

Считывает имя s в текущей позиции в соответствии с форматом имени файла операционной системы (например, "lib/My.Mod" под Unix). Пропускает 0AX в конце (если есть).

PROCEDURE Real (VAR x: SHORTREAL);

Считывает и помещает в x 32-битное вещественное число (REAL) согласно формату:

["-"] digit {digit} [{digit} ["E" ("+" | "-") digit {digit}]].

PROCEDURE String (VAR s: ARRAY OF CHAR);

Считывает строковый литерал и помещает его в s.

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

(табуляции, новые строки и т. п.). Кавычки могут быть одинарные или двойные. Строка должна начинаться и заканчиваться одинаковыми кавычками.

PROCEDURE Word (VAR s: ARRAY OF CHAR);

Читает слово и помещает его в s.

Пропускает пробельные литеры, считывает литеры до следующей пробельной литеры и помещает прочитанное слово в s, затем пропускает литеры до следующей непробельной литеры или литеры новой строки. Пропускает символ новой строки.