Тексты программ 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);