else

{$endIF} begin

Pag :• Source div LPage; {Логическая страница} Pos := Source mod LPage; {Смещение в ней) PD := @Dest; {Указатель в приемнике} PS := ptr(EMSS,Pos); {Указатель в источнике} Stop := False; {Флаг ошибки картирования} Rest :=' Sz; ^Остаток чтения} repeat {Цикл по страницам EMS} MapEMSPage(Handle,0,Pag); {Картируем окно} EMSError(EMSStatus) ;

Stop :- EMSStatusOO; {Признак ошибки} if not Stop then begin

{Определяем размер Sz очередного блока:} if Rest>LPage-Pos then

Sz :-= LPage-Pos else

Sz := Rest;

Move(PS",PD^,Sz); {Переносим блок} Dec(Rest,Sz); {Уменьшаем остаток} Inc(Pag); {Следующая логическая стр.} PS :-= ptr(EMSS,0) ;

Pos 0;

Inc(PW.O,Sz); {Смещение в приемнике} {Нормализуем, указатель PD приемника:} PW.S :» PW.S+(PW.O shr 4);

PW.O ;= PW.O mod 16 end

until Stop oe (Rest-0) end

end; (TEMSArea.ReadEMS} /—.——_-_———__-_-,

Procedure TEMSArea.EMSError(NError: Byte);

{Получает управление при ошибках EMM илипри выполнении методов объекта. По умолчанию выводит сообщение с номером NError.! const

Msg: array [$80..$AD] of String »( 'Внутренняя ошибка EMM', 'Сбой EMS-платы",

'EMM занят обработкой предыдущего запроса', 'Неверный дескриптор окна',

'Запрошена неопределенная в данной версии EMM функция', "Нет доступных дескрипторов окон', 'Ошибка при сохранении или восстановлении окна', 'Запрос распределения превышает общую EMS-память', 'Запрос распределения превышает число доступных страниц', 'Попытка создать дескриптор с нулевым количеством страниц', 'Дескриптор не располагает таким числом страниц', 'попытка картировать больше 4 страниц", ,

•Переполнение области сохранения картирующего контекста .

'Попытка повторного сохранения картирующего контекста',

"Попытка восстановления несохраненного контекста",

'Не определен параметр подфункции',

1 Неизвестный тип атрибутов',

'Нет аппаратной поддержки сохраняемых страниц ,

•Источник и приемник информации одновременно находятся в ЕМЗ-памяти',

'Размер приемника информации слишком мал',

'Стандартная память частично перекрывает расширенную память",