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

это EGA, VGA или SVGA в графическом режиме) begin

х := 0; (Левый верхний...} хх := GetMaxX; {угол экрана} у ;= 0; (Правый нижний угол} УУ := 0;

Рад := 0; (Номер началььой страницы EMS}

(Определяем количество dy полных строк экрана, которые еще умещаются в памяти одной страницы EMS}

while (ImageSize(х,у,хх,yy)<LPage) and (yy<=GetMaxY) do inc(yy);

dy := yy-1;

/Основной цикл сохранения копии блоками по 16 К) repeat

(Картируем страницу окна} MapEMSPage(Handle,0,Рад) ;

(Получаем копию части жрана} if y+dy<-GetMaxY then

GetImage(x,y,xx,y+dy,EMS^) else

GetImage(x/y,xx,GetMaxY,EMS");

inc(Рад) ;

inc (y,dy) until y>=GetMaxY end end {case Mode} end; {TEMSScreen.PutScreen} ^————-.————————;

Procedure TEMSScreen.GetScreen;

(Получает из EMS-памяти копию экрана} var

х,у,хх,yy,dy: Integer;

Рад: Byte;

EMS,Video: Pointer;

begin

(Проверяем текущий видеорежим} with Reg do begin

ah := $F;

Intr($lO,Reg) ;

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

Exit end end;

(Переносим копию а видеопамять в зависимости от режима} EMS := ptr(EMSS,O); (Начало EMS} case Mode of

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

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

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

Video := Ptr($B800,0) ;

MapEMSPage(Handle,0,0) ;

if not EMSErrorFlag then

MoveToScreenfEMS^Vidao^LPage) end;

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