end; {TEMSType.}

{------- Имитатор текстового файла --------}

Procedure TEMSText.SetItemfS: String);

{Помещает в EMS-память (начиная с позиции Pos от ее начала) строку S) begin

TEMSType.SetItem(S,Length(S)+1) end; {TEMSText.SetItem} {— ——____-_———__/

Function TEMSText.GetItem: String;

{Читает из EMS-памяти очередную строку} var

L: Byte;

S: String;

begin

TEMSType.GetItem(L,l) ;

if not EMSErrorFlag then begin

s[0] := chr(L) ;

TEMSType.GetItem(S[l],L) ;

GetItem := S end else

GetItem := #26 end; {TEMSText.GetItem) {-------- Копия экрана в EMS-памяти --------}

Constructor TEMSScreen.Init;

{Создает объект - определяет текущий режим работы видеоадаптера и в зависимости от этого резервирует память нужного размера} var

Sz: Longint;

begin

{С помощью функции $F прерывания $10 определяем текущий режим работы экрана} with Reg do begin

ah :-= $F;

Ini:r($lO,Reg) ;

Mode := al end;

{Выбираем нужный размер памяти

1..7 - текстовые режимы или графика CGA,16 Кбай'г=1с

13,14 - имитация на EGA/VGA графики ССА,1б Кбайт^1с

15 - моно EGA 640х350, 28 Кбайт = 2 стр.

16 - цвет " " " ", 112 Кбайт = 7 стр.

17 - моно VGA 640х480, 38.4 Кбайт = 3 стр.

18 - цвет " " " ", 153.6 Кбайт - 10 стр.} case Mode of

1..7,13..14 : Sz := LPage;

15: Sz := 2*LPage;

16: Sz := 7*LPage;

17: Sz :- 3*LPage;

18: Sz := 10*LPage else

Sz := 24*LPage {Для SVGA} end;

TEMSArea.Init(Sz) end; {TEMSScreen.Initf /——_—————————;

Constructor TEMSScreen.Load(var F: File);

(Читает объект из файла}