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,