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 Неизвестный тип атрибутов',
'Нет аппаратной поддержки сохраняемых страниц ,
•Источник и приемник информации одновременно находятся в ЕМЗ-памяти',
'Размер приемника информации слишком мал',
'Стандартная память частично перекрывает расширенную память",