Продолжение табл. 3
Уровень
Возможность |
та |
mb |
тс |
Оа |
оь |
Ос |
1а |
1Ь |
1с |
2а |
2b |
2с |
Классы устройств ввода
Типы подсказки и эха на устройство
Длина входной очереди
Максимальный размер буфера для устройства ввода строки (в литерах)
Максимальный размер буфера для устройства ввода последовательности позиций (в точках)
Число станций вывода или ввода-вывода
Число станций ввода «ли ввода-вывода
Общая память сегментов
Станции вывода метафайла
Станции ввода метафайла
П
р и м ечание. Данные табл. 3 справедливы:
Для текста точности ДО СТРОКИ и ДО ЛИТЕРЫ.
Для станций, обеспечивающих заполнение ПО ШАБЛОНУ.
Для станций, обеспечивающих заполнение ШТРИХОВКА.
Для станций, обеспечивающих приоритеты сегментов.
В связи с ограниченностью ресурсов и переменным размером записей достижение указанных значений не всегда возможно.
Состояние ЯГС и справочные функции
Описание состояний
ЯГС может находиться в одном из пяти различных (функциональных состояний, приведенных на черт. 13:
ГЯЗК (GKCL) —ЯГС закрыто;
ГЯОТ (GKOP) — ЯГС открыто;
СТОТ (WSOP) — по крайней мере одна станция открыта;
СТАК (WSAC) — по крайней мере одна станция активна;
СГОТ (SGOP) — сегмент открыт.
Значение функционального состояния содержится в общей статистической переменной, которой до первого обращения к ЯГС присваивается значение ГЯЗК. Многие обращения к функци-
Возможные переходы между функциональными состояниям»
Черт. 13
ям ЯГС допустимы только в определенных функциональных состояниях ягс.
Общее состояние ЯГС определяется набором переменных состояния, которые обеспечивают полное описание эффекта функций. Набор переменных состояния подразделяется на:
функциональное состояние;
таблицу состояния ЯГС;
таблицу состояния сегмента для каждого существующего сегмента;
входную очередь;
таблицу состояния станции для каждой открытой станции;
таблицу ошибочных состояний ЯГС.
При обращении к определенным функциям переменные состояния размещаются в памяти, делаются доступными или ■исключаются. Когда переменные состояния размещаются в памяти, в них записываются значения по умолчанию. При инициализации таблицы состояния станции некоторые значения по умолчанию «берутся из таблицы описания станций, которая содержит данные для каждого типа станций, поддерживаемого данной реализацией ЯГС. Переменные состояния, принадлежащие этим подмножествам, изменяются и опрашиваются путем обращения к функциям ЯГС.
Если во время выполнения какой-нибудь функции ЯГС возникает ошибочная ситуация,.ЯГС вызывает функцию ОБРАБОТАТЬ ОШИБКУ. Во время выполнения этой функции ЯГС находится в состоянии обработки ошибки. В этом состоянии ЯГС допускает выполнение только справочных функций, функции ЗАРЕГИСТРИРОВАТЬ ОШИБКУ и функции АВАРИЙНО ЗАКРЫТЬ ЯГС и не допускает никаких изменений в таблицах состояния, за исключением таблицы ошибочных состояний.
Справочные функции
Справочные функции выдают значение непосредствен- ■но либо получают их из различных таблиц. Типы данных этих значений и значения по умолчанию для полей таблиц приведены в .разд. 4.
Справочные функции ЯГС построены таким образом, что при их выполнении ошибки появиться не могут. Справочные ^функции для значений, которые могут быть логически недоступны, «имеют выходной параметр «индикатор ошибки», определяющий, являются ли другие выходные параметры правильными.
Параметр доступности «индикатор ошибки» является целым и в случае, если другие значения не доступны, содержит номер ошибки, который идентифицирует соответствующую ошибку ЯГС. Те же номера ошибок используются и при выполнении других функций ЯГС, поэтому может быть составлен единый список сообщений об ошибках. Если ЯГС не находится в нужном состоянии, то выдается сообщение об ошибке с соответствующим номером, даже «если имеются другие причины, из-за которых запрашиваемые значения оказываются недоступными. Если эти значения доступны, .выдаваемое значение параметра «индикатор ошибки» будет равно нулю.
Если значение параметра «индикатор ошибки» не равно нулю, то значения других выдаваемых параметров зависят от жонкретной реализации. В описании каждой справочной функции приводится список значений параметра «индикатор ошибок», которые могут быть выданы этой функцией.
Некоторые справочные функции, выбирающие данные из таблиц состояния станции, имеют входной параметр типа «перечисление», который может принимать следующие значения:
УСТАНОВЛЕННЫЕ — значения выдаются в том виде, в ка- жом они были получены от прикладной программы;
•РЕАЛИЗОВАННЫЕ — выдаются значения, которые использовались станцией после того, как фактические значения преобразованы в имеющиеся на станции значения.
Об р а б о тк а ошибок
Для каждой функции ЯГС существует фиксированный набор ошибочных ситуаций, каждая из которых будет приводить к вызову функции ОБРАБОТАТЬ ОШИБКУ. Такой механизм контроля ошибок должен присутствовать во всех реализациях ЯГС. Функции ОБРАБОТАТЬ ОШИБКУ обеспечивают интерфейс между ЯГС и прикладной программой. Если функция ОБРАБОТАТЬ ОШИБКУ представлена прикладной программой, то она может интерпретировать информацию об ошибке и может запоминать данные в области данных для последующей интерпретации прикладной программы после выхода из функции ЯГС, во время выполнения которой произошла ошибка.
Стратегия обработки ошибок в ЯГС основана на следующей классификации ошибок:
класс 1 — ошибки, вызывающие точно определенную реакцию;
класс 2 — ошибки, приводящие к попытке сохранить результаты предыдущих операций;
класс 3 — ошибки, которые вызывают непредсказуемые результаты, включая потерю информации.
ЯГС различает три ситуации, в которых обнаруживаются ошибки:
ситуация А — ошибка обнаружена в функциях ЯГС;
ситуация Б — ошибка обнаружена в функциях, к которым было обращение ЯГС (функции драйверов и операционных систем);
ситуация В — ошибка обнаружена в других частях прикладной программы.
Если ошибки обнаружены вне ЯГС (ситуация В), то прикладная программа либо снова получает управление для продолжения выполнения программы, либо происходит аварийное завершение программы. В последнем случае результаты работы программы непредсказуемы (класс 3), и в худшем случае вся графическая информация, подготовленная в задаче до этого момента, может быть потеряна. Если же прикладная программа получает управление, она может сделать попытку явно закрыть ЯГС надлежащим образом или, по крайней мере, попытаться аварийно закрыть ЯГС путем обращения к функции АВАРИЙНО ЗАКРЫТЬ ЯГС. Аналогично, если ошибка возникла в функциях, вызываемых из ЯГС, и управление не возвращено в ЯГС надлежащим образом, то результаты также являются непредсказуемыми.
Функция АВАРИЙНО ЗАКРЫТЬ ЯГС является средством, зависящим от реализации. Ее назначением является сохранение как можно большей части подготовленной графической информации. Ее можно непосредственно вызвать из прикладной прог-
3 Зак. Ж 4
раммы. Она также вызывается из самого ЯГС в виде стандартной’ реакции на ошибки класса 2.
Ошибки, которые явно перечислены в составе описания- ЯГС, относятся к классу 1 ошибок. Эти ошибки либо обнаруживаются внутри самого ЯГС, либо функция, вызванная из ЯГС, передает управление в соответствующую функцию ЯГС вместе с соответствующей информацией об ошибке. Во всех случаях ошибок класса 1 ЯГС обращается к функции ОБРАБОТАТЬ ОШИБКУ. Если при вызове функции ЯГС возникает сразу несколько ошибочных ситуаций, то сообщается по крайней мере об одной из этих ошибок.
В прикладной программе может иметься собственная программа обработки ошибок или использоваться функция обработки ошибок, предусмотренная в составе ЯГС. Любая функция- обработки ошибок получает от ЯГС следующую информацию:
идентификацию ошибки;
идентификацию функции ЯГС, которая вызвала функцию- ОБРАБОТАТЬ ОШИБКУ;
файл ошибок.
Функция ОБРАБОТАТЬ ОШИБКУ, входящая в состав- ЯГС, фактически только обращается к функции ЗАРЕГИСТРИРОВАТЬ ошибку с тем же самым набором параметров. Последняя функция выполняет следующие действия:
записывает сообщение об ошибке и идентификатор функции ЯГС в файл ошибок;
возвращает управление вызывающей программе.
Вызов функций обработки ошибок в два этапа позволяет реализовать в прикладной программе свою собственную функцию- ОБРАБОТАТЬ ОШИБКУ и в то же время сохранить доступ к сервисным возможностям, предоставляемым функцией ЗАРЕГИСТРИРОВАТЬ ОШИБКУ, как это можно видеть из следующего- примера прикладной программы, содержащей функцию ОБРАБОТАТЬ ОШИБКУ:
ОБРАБОТАТЬ ОШИБКУ (номер ошибки, идентификатор функции ЯГС, файл ошибок);
произвести идентификацию функции ЯГС и ошибки для того,, чтобы различить следующие варианты:
вариант «специальная обработка»:
интерпретировать параметры ошибки, переданные из ЯГС;
сохранить информацию для прикладной программы в указанной ею области данных;
возвратить управление в вызывавшую функцию ЯГС;
вариант «стандартная обработка»:
вызвать функцию ЗАРЕГИСТРИРОВАТЬ ОШИБКУ со всеми- выше перечисленными параметрами;
возвратить управление вызвавшей функции ЯГС.КОНЕЦ.
Все функции ЯГС при обнаружении ошибки выполняют «следующие действия:
устанавливают состояние ошибки в положение ВЫКЛЮЧЕНО;
вызывают функцию ОБРАБОТАТЬ ОШИБКУ с соответствующими параметрами;
устанавливают состояние ошибки в положение ВЫКЛЮЧЕНО;
выполняют встроенные алгоритмы реакции на ошибку (обычно функция, вызвавшая ошибку, не выполняет никаких действий, но для этого иногда бывает необходимо выполнить некоторые операции по очистке).
Все функции ЯГС перед началом работы должны производить следующие проверки (в указанном порядке):
находится ли ЯГС в нужном состоянии;
правильно ли заданы входные параметры.
Должна сообщаться информация, по крайней мере, о первой из обнаруженных ошибок (лишь в случае справочных функций первая обнаруженная ошибка выдается через индикатор ошибки).
Прикладная программа, обладающая собственной функцией ОБРАБОТАТЬ ОШИБКУ, имеет доступ к набору переменных, описывающих состояние ЯГС. Однако в процессе обработки ошибки нельзя модифицировать состояние ЯГС, то есть из прикладной программы, имеющей собственную функцию ОБРАБОТАТЬ ОШИБКУ, допустимо обращение только к справочным функциям, функции ЗАРЕГИСТРИРОВАТЬ ОШИБКУ и функции АВАРИЙНО ЗАКРЫТЬ ЯГС. Это достигается путем установки состояния ошибки в положение ВКЛЮЧЕНО до обращения из ЯГС к функции ОБРАБОТАТЬ ОШИБКУ и установки состояния •ошибки в положение ВЫКЛЮЧЕНО сразу после вызова этой функции.
Список ошибок ЯГС приведен в приложении 4. Справочные функции не могут вызывать ошибки.
С п еци а л ь н ы й интерфейс между ЯГС и прикладной программой
В ЯГС предусмотрен унифицированный механизм расширения для обеспечения доступа к специфическим особенностям оборудования («стандартный способ выполнения нестандартных действий»). Он реализован с помощью функции РАСШИРЕНИЕ.
Функцию РАСШИРЕНИЕ не следует использовать для «генерации геометрических выходных данных. Для этих целей лучше воспользоваться функцией ОБОБЩЕННЫЙ ПРИМИТИВ ВЫВОДА, которая предназначена для генерации геометрических выходных данных, не обеспечиваемых ЯГС.
3. ФУНКЦИИ ЯГС
Правила описания функций
Заголовок описания каждой функции должен содержать;: название функции;
состояния ЯГС, в которых функция может использоваться, исключая состояния для справочных функций (см. п. 3.9), для ни* указываются только те состояния, в которые справочные функции могут возвратить заданные правильные значения;
самый низкий уровень ЯГС, на котором данная функция явно определена и является обязательной.
В списке параметров для каждого параметра указывается следующая информация:
является ли параметр входным (вх) или выходным (вых); название параметра;
для координат — система координат (МК, НК, КУ), используемая при вызове функции;
разрешенные значения для данных типа «перечисление» или любые ограничения на диапазон изменения значений для целых и действительных данных (например >0);
тип данных:
Ц — целые значения; Д — действительные значения; С — символьные значения; Т — точка; И — имя; П — перечисленные значения. Тип данных может иметь составную форму, в основе которой лежит одна или несколько простых форм (например ПхТ), ил» составную форму типа 0 — общие значения записи данных.
Список функций ЯГС приведен в Приложении 3.
Функции управления
ОТКРЫТЬ ЯГС