MSDOS(Reg) ;

if ((Flags and FCarry)<>Q) or (al=0) then Goto Exit;

ah := $46; {Получаем номер версии EMM} Intr67;

if EMSStatus~0 then {Если ошибка - нет EMM} begin

EMSVer :« al; {Сохраняем номер версии} ah := $41; {Получаем сегмент окна} Intr67;

EMSS := Ьх (Сохраняем сегмент} end end;

Exit:

IsEMS := EMSVerOO end; {IsEMS} (— —____—_____——}

Function GetEMMVersion: String;

{Возвращает номер версии EMM в формате 'Х.Х'} var

s,ss: Strings-begin

if EMSVer=0 then if IsEMS then;

Str (EMSVer shr 4,s);

Str(EMSVer and $F,ss);

GetEMMVersion := s+'.'+ss end;

^———————————;

Function EMSSeg: Word;

{Возвращает сегментную часть адреса "окна" EMS-памяти} begin

if EMSS=0 then if IsEMS then;

EMSSeg := EMSS end; {EMSSeg! {,—, —————————}

Procedure GetEMSInfo(var AllPage, Pages: Word);

/'Возвращает полное количество (AllPages) и количество незанятых (Pages) страниц} begin

if IsEMS then with Reg do begin

ah :=$42;

Intr67;

AllPage := dx;

Pages := bx end else begin

AllPage := 0;

Pages := 0 end end; {GetEMSInfo} ^————————————;

Procedure NewEMSHandle(var Handle: Word;Pages: Word) ;

{Открывает новый дескриптор Handle и связывает с ним Pages страниц EMS} begin

it IsEMS then with Reg do