350 Приложение

{Записывает объект TEMSArea в файл F. Файл должен быть открыт на валясь с длиной блоков в 1 байт и позиционирован на нужное место (обычно ~ а конец файла) } var

SRead,Rest: LongInt;

S: String;

All,k: Word;

Stop: Boolean;

P: Pointer;

begin

if not IsEMS then

EMSError(?A5) {Нет EMS} else begin

{Записываем заголовок объекта - строку RegHeadTEMSArea} EMSErrorFlag := False;

S := RegHeadTEMSArea;

if WriteFile(F,S,SizeOf(RegHeadTEMSArea))

then begin {Записываем поля MaxPag и Size} if WriteFile(F,MaxPag,2) and

WriteFile(F,Size,4) then

begin /Записываем содержимое памяти} Rest := Size; {Незаписанный остаток} Р := Ptr(EMSSeg,0); {Адрес начала физической страницы окна} All := 0; {Начинаем с 0-й логической страницы) Stop :=• False; {Признак ошибки} while (RestoO) and not Stop do begin

MapEMSPage(Handle,0,All);

EMSError(EMSStatus) ;

if EMSStatusOO then

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

SRead := LPage else

SRead := Rest;

Stop:= not WriteFile (F.V, SRead);

Dec(Rest,SRead);

Inc(All) end end end end end; {TEMSArea.Store} {——— ——————_——;

Destructor TEMSArea.Done ;

{Уничтожает объект TEMSArea и освобождает связанную с ним память} begin

if not IsEMS then

EMSError($A5) {Нет EMS} else begin

DisposeEMSHandle(Handle) ;

EMSError(EMSStatus) end

end; {TEMSArea.Done} ;———————————;

Procedure TEMSArea.WtiteEMS(var Source; Dest,Sz: Longint);

{Записывает Sz байт из переменной Source в EMS,