var

S: String;

begin

TEMSArea.Load(F) ;

if not EMSErrorFlag then

if ReadFile(F,S,SizeOf(RegHeadTEMSScreen))

and (S=RegHeadTEMSScreen) then ReadFile(F,Mode,1) else

Done

end; {TEMSScreen.Load} (•-.-.———————————}

Procedure TEMSScreen.Store(var F: File) ;

{Сохраняет объект в файле} begin

TEMSArea.Store(F) ;

if not EMSErrorFlag then

if WriteFile(F,RegHeadTEMSScreen,SizeOf(TEMSScreen)) then WriteFile(F,Mode,1)

end; {TEMSScreen.Store} _•—————————_——__

Procedure TEMSScreen.PutScreen;

{Записывает в EMS-лаиять копию экрана} var

x,y,xx,yy,dy: Integer;

Pag: Byte;

EMS,Video: Pointer;

begin

{Проверяем текущий видеорежим} with R-eg do begin

ah := $F;

Intr($lO,Reg) ;

if aloMode then {Режим соответствует Mode?} begin (Нет - сообщаем и выходим} EMSError($AD) ;

Exit «id end;

(Копируем видеопамять в зависимости от режима} EMS :» ptr(EMSS,0); {Начало EMS} case Mode of

1..6,13..14: {Текстовые режимы всех адаптеров,

кроме MDA, графика CGA или ее имитация:

начало видеопамяти в $В800, длина до 16 Кбайт} begin

Video := Ptr($B8OO,0) ;

MapEMSPage(Handle,0,0) ;

if not EMSErrorFlag then

MoveFromScreen (Video^EMS^yLPage) end;

7: {Текстовый режим MDA: начало видеопамяти в $ВООО, длина 4 Кбайт) begin

Video := Ptr($BOOO,0) ;

MapEMSPage(Handle,0,0) ;

if not EMSErrorFlag then

MoveFromScreen(Video,EMS,Lpage div 4) end;

else {Остальные: дисплеи: предполагается, что