По примерам из других частей уже известно как выводить данные на экран. Выводился и текст, и целые, и дробные числа. Но в программах не было ни разу использования ввода, хотя в реальных программах оно используется постоянно. Настал момент, когда необходимо устранить этот недостаток, для успешного продолжения. Потоки ввода/вывода являются абстракцией, и на каких компьютерах (домашних, рабочих) есть и клавиатура, и мышь, и экран, и принтер — множество каналов ввода и вывода. А на других компьютерах (промышленные, сервисные, регулирующие) этих каналов ввода/вывода нет, зато есть вводы от датчиков и выходы на исполнительные механизмы. И у них свои потребности в воде/выводе. Поэтому такой операции, как print
в python — у КП нет. Все подобные операции вынесены в отдельные подсистемы. И во многом — это положительно. Ведь если что-то в языке может вполне оказаться необязательным, зачем его утяжелять? В любом случае, необходимую подсистему всегда можно либо установить, либо создать самому.
В БлэкБоксе определено множество подсистем и модулей, и модуль In
как раз предназначен для ввода информации. Более того, на самом деле этот модуль лишь побочный продукт — он обеспечивает возможность исполнения примеров книги написанной Никлаусом Виртом в соавторстве с Райзером «Программирование на Обероне» (родственный язык КП). Какие определены переменные и структуры в модуле In
:
VAR Done-: BOOLEAN;
единственная доступная переменная, доступна только для чтения (Done-
). Устанавливается в значение TRUE
при успешном открытии потока на чтение. И устанавливается в FALSE
при первом неудачном чтении входного потока, и остаётся в этом значении до момента повторного открытия потока на чтение.
PROCEDURE Open
. Эта процедура открывает входной поток. В BlackBox, входной поток открывается на ту точку, которая в фокусе ввода содержит текст (например, текст выделен). Если нет точки фокуса ввода, или если он не содержит текста переменная Done
устанавливается в FALSE
. Если есть цель фокусировки, содержащая текст, но при этом ничего не выбрано, входной поток соединяется с началом этого текста, в противном случае ввод начинается с начала выделения.
PROCEDURE Char (OUT ch: CHAR)
. Если переменная Done
удерживается в TRUE
, эта процедура пытается считать символ, в противном случае она ничего не делает.
PROCEDURE Int (OUT i: INTEGER)
. Если переменная Done
удерживается в TRUE
, эта процедура пытается считать число INTEGER
в переменную i
(определена, как переменная, которую процедура может изменять — OUT
), в противном случае она ничего не делает.
PROCEDURE LongInt (OUT l: LONGINT)
. Если переменная Done
удерживается в TRUE
, эта процедура пытается считать число LONGINT
в переменную i
(определена, как переменная, которую процедура может изменять — OUT
), в противном случае она ничего не делает.
PROCEDURE Real (OUT x: REAL)
. Если переменная Done
удерживается в TRUE
, эта процедура пытается считать число REAL
в переменную x
(определена, как переменная, которую процедура может изменять — OUT
), в противном случае она ничего не делает.
PROCEDURE Name (OUT name: ARRAY OF CHAR)
. Если переменная Done
удерживается в TRUE
, эта процедура пытается считать идентификатор в переменную name
(определена, как переменная, которую процедура может изменять — OUT
, причём переменная в виде массива литер), в противном случае она ничего не делает. Имя переменной представляет собой последовательность допустимых идентификаторов Компонентный Паскаль сцепленных точками, например, Dialog.Beep
.
PROCEDURE String (OUT str: ARRAY OF CHAR)
. Если переменная Done
удерживается в TRUE
, эта процедура пытается считать строку, в противном случае она ничего не делает. Строка представляет собой последовательность символов, разграниченных пробелами (например: перевод строки, возврат каретки, табуляции) или двойные кавычки «»).
Как видно из описания модуля, на ввод могут подаваться различные данные, и даже команды, которыми можно влиять на состояние BlackBox. Модуль In
следует идеологии «текст как интерфейс». Частично с этой идеологией уже можно было столкнуться на страницах этого учебника, и при самостоятельном вводе и исполнении программ. Например, КОММАНДЕР
как раз является типичным представителем идеологии «текст как интерфейс», составные документы учебника, примеры из которых Блэкбокс способен вычленить из текста и картинок — тоже пример идеологии «текст как интерфейс».