Запрос на освобождение памяти исполняется каждым компонентом и не включен в описания запросов компонентов, приведенные в следующих разделах.
Схема обработки ошибок достаточно проста по своей идее — каждый новый обработчик ошибок может обрабатывать только часть ошибок, а обработку остальных может передать ранее установленному обработчику. Пользователь может организовать обработку ошибок и не прибегая к установке обработчика ошибок — обработчик ошибок по умолчанию почти во всех случаях устанавливает номер последней ошибки в переменную Error, которая может быть считана с помощью запроса GetError и обработана прямо в компоненте, выдавшем запрос.
Если обработчик ошибок устанавливает номер последней ошибки в переменной Error, то все запросы, поступившие после момента установки, завершаются неуспешно. Это состояние сбрасывается при вызове запроса «дать номер ошибки».
Процедура обработки ошибок
Процедура обработки ошибок должна удовлетворять следующим требованиям:
• Это должна быть процедура с дальним типом адресации. Формат описания процедуры обработки ошибок
Far;ErrorFunc(Long ErrorNumber)
• После обработки ошибок процедура может вызвать ранее установленный обработчик ошибок. Адрес ранее установленного обработчика ошибок процедура обработки ошибок получает в ходе следующей процедуры:
• Вызов процедуры с нулевым номером ошибки означает, что в следующем вызове будет передан адрес старой процедуры обработки ошибок.
• Значение аргумента ErrorNumber при вызове, следующем непосредственно за вызовом с нулевым номером ошибки, должно интерпретироваться как адрес старой процедуры обработки ошибок.
Ниже приведено описание запросов, связанных с обработкой ошибок и исполняемых макрокомпонентом нейрокомпьютер.
Установить обработчик ошибок (OnError)
Описание запроса:
Pascal:
Function OnError(NewError: ErrorFunc): Logic;
C:
Logic OnError(ErrorFunc NewError)
Описание аргументов:
NewError — адрес новой процедуры обработки ошибок.
Назначение — устанавливает новый обработчик ошибок.
Описание исполнения.
1. Если Error <> 0, то выполнение запроса прекращается.
2. Вызов NewError с аргументом 0 — настройка на установку цепочки обработки ошибок.
3. Вызов NewError с аргументом ErrorManager (вместо длинного целого передается адрес старой процедуры обработки ошибок).
4. ErrorManager:= NewError
Дать номер ошибки (GetError)
Описание запроса:
Pascal:
Function GetError: Integer;
C:
Integer GetError()
Назначение — возвращает номер последней необработанной ошибки и сбрасывает ее.
Описание исполнения.
1. GetError:= Error
2. Error:= 0
Списки ошибок, возникающих в различных компонентах, даны в разделах «Ошибки компоненты …», в соответствующих разделах. Все номера ошибок каждого компонента являются трехзначными числами и начинаются с номера компонента, указанного в колонке «Ошибка» табл. 16.
Запросы, однотипные для всех компонентов
Таблица 16. Префиксы компонентов
Префикс |
Компонент |
Запроса |
Ошибки |
ex |
0 |
Исполнитель |
tb |
1 |
Задачник |
pr |
2 |
Предобработчик |
nn |
3 |
Сеть |
es |
4 |
Оценка |
ai |
5 |
Интерпретатор ответа |
in |
6 |
Учитель |
cn |
7 |
Контрастер |
Ряд запросов обрабатывается всеми компонентами, кроме компонента исполнитель, носящего вспомогательный характер. Один из таких запросов — FreeMemory — был описан в разделе «Управление памятью», а два запроса, связанных с обработкой ошибок — в разделе «Обработка ошибок». В данном разделе приводятся описания остальных запросов, имеющих одинаковый смысл для всех компонентов. В отличие от ранее описанных запросов эти запросы опираются на структуру исполняющего компонента, поэтому к имени запроса добавляется префикс, задающий компонента. Список префиксов приведен в табл. 16. Единственным исключением из числа компонентов, исполняющих перечисленные в данном разделе запросы, является компонент исполнитель.
Все описываемые в данном разделе запросы можно разбить на четыре группы:
1. Установление текущего компонента.
2. Запросы работы со структурой компонента.
3. Запросы на получение или изменение параметров структурной единицы.
4. Запуск редактора компонента.
Все имена запросов начинаются с символов «xx», которые необходимо заменить на префикс из табл. 16 чтобы получить имя запроса для соответствующего компонента. При указании ошибок используется символ «n», который нужно заменить на соответствующий префикс ошибки из табл. 16.
Читать дальше