2.8.1. Логические устройства ввода
2.8.1.1. Прикладная программа получает графические данные от оператора с помощью логических устройств ввода, которые передают значения входных данных программе.
2.8.1.2. Логические устройства ввода идентифицируются идентификатором станции, классом устройства ввода и номером устройства.
2.8.1.3. Идентификатор станции определяет открытую графическую станцию, категории ввода или ввода/вывода. Логическое устройство ввода является частью графической станции.
2.8.1.4. Класс устройств ввода определяет тип входных данных, выдаваемых логическим устройством ввода. Существует шесть классов устройств ввода и соответствующих им типов входных данных:
ВВОД ПОЗИЦИИ: выдает значения координат позиции в системе мировых координат и номер преобразования нормирования;
ВВОД ПОСЛЕДОВАТЕЛЬНОСТИ ПОЗИЦИЙ: выдает последовательность позиций в системе мировых координат и номер преобразования нормирования;
ВВОД ЧИСЛА: выдает действительное число;
ВЫБОР АЛЬТЕРНАТИВЫ: выдает признак ВЫБОР и неотрицательное целое число, определяющее выбор из набора альтернатив;
УКАЗАНИЕ ОБЪЕКТА: выдает признак УКАЗАНИЕ, имя сегмента и идентификатор указания;
ВВОД СТРОКИ: выдает последовательность литер.
2.8.1.5. Различные логические устройства ввода одного и того же класса одной и той же станции различаются по номеру.
2.8.1.6. Графическая станция ввода и станция ввода-вывода должны содержать по крайней мере одно логическое устройство ввода. Реализация ЯГС, которая поддерживает, по крайней мере, одну станцию ввода-вывода, должна обеспечить оператора не менее чем одним логическим устройством ввода каждого класса, определенного на данном уровне реализации.
2.8.1.7. Каждое логическое устройство ввода может работать в трех режимах: ЗАПРОС, ОПРОС, СОБЫТИЕ. В каждый момент времени логическое устройство ввода может находиться в одном и только одном режиме, установленном путем обращения к какой-либо из функций группы ЗАДАТЬ <класс устройства ввода> РЕЖИМ.
2.8.1.8. В зависимости от режима работы входные данные с устройств получают следующими способами:
ЗАПРОС - каждое обращение к функции ЗАПРОСИТЬ <класс устройства ввода> вызывает попытку чтения значения входных данных с заданного логического устройства ввода, которое должно находиться в режиме ЗАПРОС. Затем ЯГС ожидает пока оператор не введет входные данные или не выполнит команду принудительного прекращения ввода. Действия, выполняемые по команде принудительного прекращения ввода, зависят от конкретного логического устройства ввода и от реализации. Если выход из режима производится вследствие принудительного прекращения ввода, то значение входных данных оказывается неопределенным;
ОПРОС - обращение к функции ОПРОСИТЬ <класс устройства ввода> приводит к тому, что ЯГС, не ожидая действий оператора, выдает текущее значение входных данных с заданного логического устройства ввода, которое должно находиться в режиме ОПРОС;
СОБЫТИЕ - ЯГС поддерживает очередь событий, состоящую из упорядоченных по времени отчетах о событиях. Отчет о событии содержит идентификатор логического устройства ввода и значение входных данных с устройства. Отчет о событиях генерируется асинхронно в результате воздействий оператора на устройства ввода, находящееся в режиме СОБЫТИЕ. Прикладная программа может выбрать из очереди самый "старый" отчет о событии и проанализировать его содержимое, а также удалить из очереди все отчеты о событиях, поступившие от определенного логического устройства ввода.
2.8.1.9. Логическое устройство ввода осуществляет взаимодействие с оператором в течение времени, пока оно находится в режимах ОПРОС или СОБЫТИЕ, а в режиме ЗАПРОС - только во время выполнения функции ЗАПРОСИТЬ <класс устройства ввода>.
Несколько устройств, входящих в состав нескольких станций, могут принимать участие во взаимодействиях одновременно.
2.8.2. Модель логического устройства ввода
2.8.2.1. Для описания действий, выполняемых логическими устройствами ввода, определим их взаимосвязь с физическими устройствами ввода, используя концепции измерений и фиксаторов.
2.8.2.2. Логическое устройство ввода содержит данные об измерении, фиксаторе, начальном значении, типе подсказки и эха, области эха, а также блок данных, содержащий детальную информацию о типе подсказки и эха. Измерение и фиксатор логического устройства ввода являются частями реализации станции. Начальное значение, тип подсказки и эха, область эха и блок данных могут быть заданы прикладной программой.
2.8.2.3. Измерение логического устройства ввода представляет собой значение, определяемое одним или несколькими физическими устройствами ввода, вместе с отображением измерения. Одним и тем же физическим устройством ввода может одновременно определяться более чем одно измерение, при этом для каждого измерения задается свое отображение. Измерение может рассматриваться как состояние независимого, активного процесса (процесс измерения). Каждое такое состояние в точности соответствует значению входных данных, поступающих в ЯГС. Процесс измерения существует, пока логическое устройство ввода принимает участие во взаимодействии.
2.8.2.4. При запуске процесса измерения осуществляется проверка относящихся к данному логическому устройству ввода данных в таблице состояния станции. Прежде всего начальное значение проверяется на допустимость в соответствии с правилами, зависящими от входного класса. Если проверка заканчивается успешно, то в качестве текущего состояния процесса измерения используется начальное значение, в противном случае используется значение, зависящее от применяемого логического устройства ввода. Затем выводится подсказка для указания готовности устройства к использованию. (Форма подсказки для устройства определяется типом подсказки и эха для этого устройства, который может быть выбран путем вызова соответствующей функции ИНИЦИАЛИЗИРОВАТЬ). Этим завершается запуск процесса измерения.
2.8.2.5. Если процесс измерения сопровождает эхо, оператору посылается информация о текущем состоянии процесса измерения.