Тексты программ 349

EMSError($A6) {Ошибка чтения или несовпадение заголовка} else {Читаем поля МахРад и Size} begin

if not (ReadFile(F,MaxPag,2) and ReadFile(F,Size,4)) then

Exit; {Была ошибка при чтении полей} (Проверяем доступную память} GetEMSInfo(All,k);

if k<MaxPag then

EMSError($88) {Нет нужной памяти} else begin

{Пытаемся создать дескриптор) NewEMSHandle(Handle,MaxPag) ;

if EMSStatusoO then

EMSError(EMSStatus) else

begin {Читаем содержимое памяти} Rest :=• Size; {Непрочитанный остаток} Р := Ptr(EMSSeg,0);{Адрес начала физической страницы окна} АН := 0; (Начинаем с 0-й логической страницы} Stop := False;

while (RestoO) and not Stop do begin

MapEMSPage (Handle, 0,AU);

EMSError(EMSStatus);

if EMSStatusoO then

Exit; (Ошибка картирования} if Rest>LPage then

SRead := Lpage else

SRead :=• Rest;

Stop :- not ReadFile(F,P",SRead);

Dec(Rest,SRead) ;

Inc(All) end end end end end

end; {TEMSArea.Load} /———————————;

function TEMSArea.WriteFile(var F: Pile; var Source; Sz: Word): Boolean;

{Записывает Sz байт из переменной Source в файл F и контролирует результат) var

К: Word;

begin

BlockWrite(P,Source,Sz,К) ;

if KoSz then begin

EMSError($A8) ;

WriteFile := False {Ошибка при записи) end else

WriteFile := True (Нет ошибок} end; {TEMSArea.WriteFile) ^-————————————;

Procedure TEMSArea.Storetvar F: Pile);