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);
(Читает объект из файла}