18.3.2. Анализ результата инициализации

Предопределенная в модуле Overlay переменная OvrResult типа Integer сохраняет код завершения процедур и функций модуля Overlay, в том числе и OvrInit. Определено семь возможных значений, которые может принимать OvrResult. Для каждого из них предопределена константа (табл. 18.1).

Таблица 18.1

Константа

Ее смысл

OvrOk = 0

Нормальное завершение

OvrError = -1

Ошибка управления Overlay

OvrNotFound = -2

Файл .OVR не найден

OvrNoMemory = -3

Не хватает памяти для буфера

OvrIOError = -4

Сбой при чтении оверлейного файла

OvrNoEMSDriver = -5

Драйвер EMS не установлен

OvrNoEMSMemory = -6

Емкости EMS-памяти не достаточно

Ошибка OvrError обычно возникает при попытке инициализации неоверлейного файла. Другая ошибка, OvrNotFound, может возникнуть при неправильном размещении оверлейного файла на диске. Если в имени файла OvrFileName при инициализации не указан полный путь, то файл ищется сначала в текущем каталоге, затем в том же каталоге, где находится ЕХЕ-файл и во всех каталогах, которые указаны в системной переменной MS-DOS PATH. Если ни в одном из них файл не найден, то генерируется ошибка. Сама программа при этом продолжит свою работу до первой попытки вызвать процедуру или функцию, находящуюся в оверлейном файле, после чего остановится с выдачей кода фатальной ошибки выполнения 208 Overlay manager not installed («администратор оверлеев не установлен»). Чтобы избежать подобных неприятностей,

- 397 -

рекомендуем файлы .ЕХЕ и .OVR хранить в одном каталоге (что, собственно, и делает компилятор).

Еще одна ошибка инициализации, имеющая фатальные последствия, это OvrNoMemory. Ее появление свидетельствует либо о нехватке свободной памяти в ПЭВМ, либо о том, что самый крупный оверлейный модуль (а именно он определяет размер оверлейного буфера) следовало бы разбить на несколько независимых модулей.

Ошибка OvrIOError свидетельствует о возникшем сбое при чтении оверлейного кода из файла. Как правило, к ее появлению приводят внешние причины (повреждение файла, сбой внутри MS-DOS и т.п.).

Два последних кода ошибки (OvrNoEMSDriver и OvrNoEMSMemory) не могут быть выданы процедурой OvrInit. Они могут появиться при работе добавочной процедуры инициализации OvrInitEMS.