Будет ли ОПС реализована в рамках самого ЯГС или путем использования возможностей соответствующей физической стан­ции или другого устройства ввода-вывода, оставляется на усмотре­ние разработчика.

    1. Функции ОПС и отсечение

      1. Как и для других станций, сегмент заносится в ОПС только в том случае, если ОПС активна в момент его создания. С каждым примитивом при этом связывается прямоугольник отсече­ния. Если запись «индикатор отсечения» в таблице состояния ЯГС в момент создания сегмента имеет значение ОТСЕКАТЬ, то в ка­честве прямоугольника отсечения берется прямоугольник отсече­ния из таблицы состояния ЯГС, в противном случае указывается область [0., 1.] X [0., 1.] в НК-

      2. Функция ВЫВЕСТИ СЕГМЕНТ НА СТАНЦИЮ копи­рует примитивы из находящегося в ОПС сегмента на заданную графическую станцию. Функция преобразует примитивы в соответ­ствии с преобразованием сегмента и помещает связанные с прими­тивами прямоугольники отсечения и преобразованные примитивы на видовой конвейер в точку, откуда информация была взята, однако информация посылается только на станцию, заданную в данном конкретном обращении, в соответствии с черт. 9. В момент обра­щения к функции сегмент не может быть открыт. В отличие от фун­кции СВЯЗАТЬ СЕГМЕНТ СО СТАНЦИЕЙ эта функция не при­водит к запоминанию сегмента на станции.

      3. Функция СВЯЗАТЬ СЕГМЕНТ СО СТАНЦИЕЙ ко­пирует сегмент в ППС заданной графической станции таким об­разом, как это было бы, если бы станция была активной в момент создания сегмента. Прямоугольники отсечения копируются без из­менения. К этой функции также нельзя обращаться, когда сегмент открыт.

      4. Функция ВСТАВИТЬ СЕГМЕНТ позволяет преобразо­вать и вновь включить в поток примитивов вывода примитивы, входящие в записанный в ОПС сегмент. Функция ВСТАВИТЬ СЕГ­МЕНТ сначала считывает примитивы из сегмента в ОПС, выпол­няет преобразование включения, после чего засылает их в видовой конвейер в точку, предшествующую точке распределения данных по станциям. Все прямоугольники отсечения во вставляемом сегменте игнорируются. Каждому обрабатываемому примитиву приписы­вается новый прямоугольник отсечения, который совпадает с пря­моугольником отсечения из таблицы состояния ЯГС, если запись «индикатор отсечения» в таблице состояния ЯГС имеет значение ОТСЕКАТЬ и устанавливается равным [0., 1.] X [0., 1.], если «ин­дикатор отсечения» имеет значение БЕЗ ОТСЕЧЕНИЯ. Другими словами, прямоугольники отсечения приписываются вставляемым примитивам точно таким же образом, как и непосредственно ге­нерируемым примитивам. Таким образом, всем примитивам, обра­ботанным одним обращением к функции ВСТАВИТЬ СЕГМЕНТ, приписывается один и тот же прямоугольник отсечения. Внесенная информация может быть снова записана в ОПС, если в этот мо­мент ОПС является активной и сегмент открыт.

      5. Обращение к функции ВСТАВИТЬ СЕГМЕНТ не влия­ет на примитивы вывода, передаваемые по видовому конвейеру до или после этого обращения. Функция ВСТАВИТЬ СЕГМЕНТ ис­пользуется в случае, когда сегмент открыт, но сам открытый сег­мент не может быть вставлен.

  1. Ввод графических данных

    1. Логические устройства ввода

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

      2. Логические устройства ввода идентифицируются иден­тификатором станции, классом устройства ввода и номером уст­ройства.

      3. Идентификатор станции определяет открытую графичес­кую станцию, категории ввода или ввода/вывода. Логическое уст­ройство ввода является частью графической станции.

      4. Класс устройств ввода определяет тип входных данных, выдаваемых логическим устройством ввода. Существует шесть клас­сов устройств ввода и соответствующих им типов входных данных:

ВВОД ПОЗИЦИИ: выдает значения координат позиции в сис­теме мировых координат и номер преобразования нормирования;

ВВОД ПОСЛЕДОВАТЕЛЬНОСТИ ПОЗИЦИЙ: выдает пос­ледовательность позиций в системе мировых координат и номер преобразования нормирования;

ВВОД ЧИСЛА: выдает действительное число;

ВЫБОР АЛЬТЕРНАТИВЫ: выдает признак ВЫБОР и неот­рицательное целое число, определяющее выбор из набора альтер­натив;

УКАЗАНИЕ ОБЪЕКТА: выдает признак УКАЗАНИЕ, имя сег­мента и идентификатор указания;

ВВОД СТРОКИ: выдает последовательность литер.

  1. Различные логические устройства ввода одного и того же класса одной и той же станции различаются по номеру.

  2. Графическая станция ввода и станция ввода-вывода должны содержать по крайней мере одно логическое устройство ввода. Реализация ЯГС, которая поддерживает, по крайней мере, одну станцию ввода-вывода, должна обеспечить оператора не ме­нее чем одним логическим устройством ввода каждого класса, оп­ределенного на данном уровне реализации.

  3. Каждое логическое устройство ввода может работать в трех режимах: ЗАПРОС, ОПРОС, СОБЫТИЕ. В каждый момент времени логическое устройство ввода может находиться в одном и только одном режиме, установленном путем обращения к какой- либо из функций группы ЗАДАТЬ <класс устройства ввода> РЕ­ЖИМ.

  4. В зависимости от режима работы входные данные с ус­тройств получают следующими способами:

ЗАПРОС — каждое обращение к функции ЗАПРОСИТЬ <класс устройства ввода> вызывает попытку чтения значения входных дан­ных с заданного логического устройства ввода, которое должно находиться в режиме ЗАПРОС. Затем ЯГС ожидает пока опера­тор не введет входные данные или не выполнит команду принуди­тельного прекращения ввода. Действия, выполняемые по коман­де принудительного прекращения ввода, зависят от конкретного логического устройства ввода и от реализации. Если выход из ре­жима производится вследствие принудительного прекращения вво­да, то значение входных данных оказывается неопределенным;

ОПРОС — обращение к функции ОПРОСИТЬ <класс устрой­ства ввода> приводит к тому, что ЯГС, не ожидая действий опера­тора, выдает текущее значение входных данных с заданного логи­ческого устройства ввода, которое должно находиться в режиме ОПРОС;

СОБЫТИЕ — ЯГС поддерживает очередь событий, состоящую из упорядоченных по времени отчетах о событиях. Отчет о собы­тии содержит идентификатор логического устройства ввода и зна­чение входных данных с устройства. Отчет о событиях генерирует­ся асинхронно в результате воздействий оператора на устройства ввода, находящееся в режиме СОБЫТИЕ. Прикладная програм­ма может выбрать из очереди самый «старый» отчет о событии и проанализировать его содержимое, а также удалить из очереди все отчеты о событиях, поступившие от определенного логического ус­тройства ввода.

  1. Логическое устройство ввода осуществляет взаимодей­ствие с оператором в течение времени, пока оно находится в режи­мах ОПРОС или СОБЫТИЕ, а в режиме ЗАПРОС — только во время выполнения функции ЗАПРОСИТЬ <класс устройства вво- да>.

Несколько устройств, входящих в состав нескольких станций, могут принимать участие во взаимодействиях одновременно.

  1. Модель логического устройства ввода

    1. Для описания действий, выполняемых логическими ус­тройствами ввода, определим их взаимосвязь с физическими уст­ройствами ввода, используя концепции измерений и фиксаторов.

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

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

    4. При запуске процесса измерения осуществляется про­верка относящихся к данному логическому устройству ввода дан­ных в таблице состояния станции. Прежде всего начальное значе­ние проверяется на допустимость в соответствии с правилами, за­висящими от входного класса. Если проверка заканчивается ус­пешно, то в качестве текущего состояния процесса измерения ис­пользуется начальное значение, в противном случае используется значение, зависящее от применяемого логического устройства вво­да. Затем выводится подсказка для указания готовности устройст­ва к использованию. (Форма подсказки для устройства определя­ется типом подсказки и эха для этого устройства, который может быть выбран путем вызова соответствующей функции ИНИЦИА- .ЛИЗИРОВАТЬ). Этим завершается запуск процесса измерения.

    5. Если процесс измерения сопровождает эхо, оператору досылается информация о текущем состоянии процесса измерения.

    6. Фиксатор логического устройства ввода представляет собой одно или несколько физических устройств ввода вместе с «отображением фиксатора». Фиксатор используется оператором для указания существенных моментов времени. Это моменты, ког­да фиксатор «срабатывает». Одно действие оператора (например нажатие кнопки или концевого переключателя светового пера) вы­зывает срабатывание не более одного фиксатора. С одним и тем же фиксатором могут быть связаны несколько логических устрой­ств ввода.

    7. Фиксатор можно .рассматривать как независимый ак­тивный процесс (процесс фиксации), который посылает сообщение о срабатывании одному или нескольким получателям. Логическое устройство ввода может быть получателем для своего фиксатора, если оно находится в неудовлетворенном состоянии ЗАПРОС или в режиме СОБЫТИЕ. Оба этих условия могут быть справед­ливы одновременно для различных логических устройств ввода. Процесс фиксации существует только в том случае, если у фикса­тора имеется по крайней мере один получатель, в противном слу­чае процесс не существует.

    8. Если в момент срабатывания фиксатора логическое ус­тройство ввода находится в неудовлетворенном состоянии ЗА­ПРОС, то значение измерения этого логического устройства ввода используется в качестве результата выполнения операции ЗАП­РОС.

    9. Если одно или несколько устройств, содержащие дан­ный фиксатор находятся в режиме СОБЫТИЕ, то при срабаты­вании фиксатора идентификаторы этих устройств и значения их измерений записываются в очередь событий в виде отдельных от­четов о событиях.

    10. Если срабатывание фиксатора приводит к выполнению операции ЗАПРОС или к добавлению отчетов о событиях в оче­реди событий, ЯГС оповещает об этом оператора, причем форма оповещения зависит от реализации логического устройства выво­да и никак не контролируется функциями ЯГС.

  2. Режимы работы логических устройств ввода

    1. Режим работы логического устройства ввода может быть изменен путем вызова одной из функций ЗАДАТЬ РЕЖИМ <класс устройств ввода >.

    2. После вызова функции ЗАДАТЬ РЕЖИМ <класс уст­ройств ввода> с параметром «режим работы», имеющим значение ЗАПРОС, измерение устройства не выполняется, и идентификатор устройства отсутствует в списке получателей фиксатора устройст­ва.

    3. После вызова функции ЗАДАТЬ РЕЖИМ <класс уст­ройств ввода> с параметром «режим работы», имеющим значе­ние СОБЫТИЕ, запускается процесс измерения данного устройст- sa, и идентификатор устройства присутствует в списке получате­лей фиксатора устройства.

    4. После вызова функции ЗАДАТЬ РЕЖИМ <класс уст­ройств ввода> с параметром «режим работы», имеющим значе­ние ОПРОС, запускается процесс измерения данного устройства, но идентификатор устройства в списке получателей фиксатора этого устройства не устанавливается.

    5. Первоначально логическое устройство ввода находит­ся в режиме ЗАПРОС.

    6. Пока устройство находится в режиме ЗАПРОС, значе­ние входных данных может быть получено путем обращения к соответствующей функции ЗАПРОСИТЬ < класс устройств вво­да >. В результате выполняются следующие действия:

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

индикатор устройства добавляется в список получателей фик­сатора этого устройства. Если перед этим список был пуст, то процесс фиксации запускается;

выполнение функций ЯГС приостанавливается до тех пор, по­ка не сработает фиксатор данного устройства или оператор прину­дительно не прекратит взаимодействие;

если фиксатор сработал, то значение входных данных устанав­ливается равным значению текущего состояния процесса измере­ния;

прекращается процесс измерения;

идентификатор устройства удаляется из списка получателей фиксатора этого устройства. Если этот список пуст, то процесс фик­сации прекращается;

если фиксатор сработал, то выдается значение входных данных и признак ЕСТЬ. В противном случае выдается признак ОТБОЙ.

  1. Пока логическое устройство находится в режиме ОП­РОС, значение входных данных может быть получено путем обра­щения к функции ОПРОСИТЬ УСТРОЙСТВО <класс устройств ввода >. В результате выполнения этой функции значение вход­ных данных, не ожидая срабатывания фиксатора, устанавливается равным значению текущего состояния процесса измерения.

  2. Пока логическое устройство ввода находится в режиме СОБЫТИЕ, значения входных данных добавляются в виде отче­тов о событиях в очередь событий и могут быть получены после­довательно путем обращения к функции ОЖИДАТЬ СОБЫТИЕ с последующим обращением к одной из функций ПОЛУЧИТЬ < класс устройств ввода >.