Программирование и кодирование
}
EMSMapMultPages(handle, map, method, count) /*отображает count
страниц в map для handle*/
unsigned int handle; /*обработчик, для которого отображаются
страницы*/
LOG_TO_PHYS *map; /*отображение логических страниц в физи-
ческие*/
unsigned int method; /*используются номера кадра страниц или
адреса отображаемых сегментов*/
unsigned int count; /*кол-во элементов в отображении*/
{
segread(&segregs); /*заполнить регистры сегментов*/
inregs.h.ah =0x50; /*функция "Отобразить много страниц
обработчика" спецификации расширенной памяти*/
inregs.h.al = (unsigned char) method;
inregs.x.cx = count; /*кол-во страниц для отображения*/
inregs.x.dx = handle; /*обработчик, которому эти страницы
принадлежат*/
inregs.x.si = (unsigned int) map; /*страницы для отображения*/
result = (unsigned int) int86x(EMM_INT, &inregs, &outregs,
&segregs) >> 8;
return(result);
}
EMSReallocPages(handle, pages) /*изменяет размещение handle для
pages*/
unsigned int handle, *pages;
{
inregs.h.ah =0x51; /*функция "Переразместить страницы"
спецификации расширенной памяти*/
inregs.x.bx = *pages; /*кол-во логических страниц, которое
будет после выполнения*/
inregs.x.dx = handle; /*обработчик, для которого переразме-
- 7-64 -
щается страница*/
result = (unsigned int) int86(EMM_INT, &inregs, &outregs) >> 8;
if (!result) /*функция завершилась успешно*/
*pages = outregs.x.bx; /*новое кол-во страниц*/
return(result);
}
EMSGetHandleAttr(handle, attr) /*получает атрибут обработчика*/
unsigned int handle, *attr;
{
inregs.x.ax =0x5200; /*функция "Получить атрибут обра-
ботчика спецификации расширенной памяти*/
inregs.x.dx = handle;
result = (unsigned int) int86(EMM_INT, &inregs, &outregs);
if (!(result & 0xFF00)) /*функция завершилась успешно*/
*attr = outregs.h.al; /*атрибут*/
return(result >> 8);
}
EMSSetHandleAttr(handle, attr) /*устанавливает атрибут обработ-
чика*/
unsigned int handle, attr;
{
inregs.x.ax =0x5201; /*функция "Установить атрибут об-
работчика спецификации расширенной памяти*/
inregs.x.dx = handle;
inregs.h.bl = attr & 0x00FF;
result = (unsigned int) int86(EMM_INT, &inregs, &outregs)>> 8;
return(result);
}
EMSGetAttrCap(cap) /*получить возможности атрибута*/
unsigned int *cap;
{
inregs.x.ax =0x5202; /*функция "Получить возможности ат-
рибута спецификации расширенной памяти*/
result = (unsigned int) int86(EMM_INT, &inregs, &outregs);
if (!(result & 0xFF00)) /*успех */
*cap = outregs.h.al;
return(result >> 8);
}
EMSGetHandleName(handle, name) /*получает имя обработчика handle*/
unsigned int handle; /*обработчик, для которого получается имя*/
char *name; /*буфер для получения имени обработчика*/
{
segread(&segregs); /*заполнить регистры сегментов*/
inregs.x.ax =0x5300; /*функция "Получить имя обработчика"*/
segregs.es = segregs.ds;
inregs.x.di = (unsigned int) name;
inregs.x.dx = handle;
result = (unsigned int) int86x(EMM_INT, &inregs, &outregs,
&segregs) >> 8;
return(result);
}
EMSSetHandleName(handle, name) /*устанавливает имя обработчика
handle*/
unsigned int handle; /*обработчик, для которого устанавл. имя*/
- 7-65 -
char *name; /*буфер с именем обработчика*/
{
segread(&segregs); /*заполнить регистры сегментов*/
inregs.x.ax =0x5301; /*функция "Установить имя обработч."*/
inregs.x.si = (unsigned int) name;
inregs.x.dx = handle;
result = (unsigned int) int86x(EMM_INT, &inregs, &outregs,
&segregs) >> 8;
return(result);
}
EMSGetHandleDir(hnt, hn_cnt) /*получает имя каталога обработчика
handle*/
HANDLE_NAMES *hnt; /*указатель на таблицу имен обработчиков*/
unsigned int *hn_cnt; /*возвращенное кол-во элементов*/
{
segread(&segregs); /*заполнить регистры сегментов*/
inregs.x.ax =0x5400; /*функция "Получить каталог обработчи-
ка" спецификации расширенной памяти*/
inregs.x.di = (unsigned int) hnt;
segregs.es = segregs.ds;
result = (unsigned int) int86x(EMM_INT, &inregs, &outregs,
&segregs);
if (!(result & 0xFF00)) /*функция завершилась успешно*/
*hn_cnt = outregs.h.al; /*возврат кол-ва полученных
имен обработчиков*/
return(result >> 8);
}
EMSSearhHandleName(name, handle) /*поиск названного обработчика*/
char *name; /*имя, которое нужно искать*/
unsigned int *handle; /*возвращаемый номер обработчика*/
{
segread(&segregs); /*заполнить регистры сегментов*/
inregs.x.ax =0x5401; /*функция "Поиск названного обработчи-
ка" спецификации расширенной памяти*/
inregs.x.si = (unsigned int) name;
result = (unsigned int) int86x(EMM_INT, &inregs, &outregs,
&segregs) >> 8;
if (!result) /*функция завершилась успешно*/
*handle = outregs.x.dx; /*возврат значения обработчика*/
return(result);
}
EMSGetTotalHandles(handle_count) /*Получить общее кол-во обработ-
чиков*/
unsigned int *handle_count;
{
inregs.x.ax =0x5402; /*подфункция "Получить общее кол-во
обработчиков" спецификации расширенной памяти*/
result = (unsigned int) int86(EMM_INT, &inregs, &outregs) >>8;
if (!result)
*handle_count = outregs.x.bx;
return(result);
}
- 7-66 -
EMSMoveRegion(rp) /*передвинуть область*/
MOVE_XCHG *rp; /*указатель на дескриптор области*/
{
segread(&segregs); /*заполнить регистры сегментов*/
inregs.x.ax =0x5700; /*функция "Передвинуть область"
спецификации расширенной памяти*/
inregs.x.si = (unsigned int) rp;
result = (unsigned int) int86x(EMM_INT, &inregs, &outregs,
&segregs) >> 8;
return(result);
}
EMSExchangeRegion(rp) /*обменять область*/
MOVE_XCHG *rp; /*указатель на дескриптор области*/
{
segread(&segregs); /*заполнить регистры сегментов*/
inregs.x.ax =0x5701; /*функция "Обменять область"
спецификации расширенной памяти*/
inregs.x.si = (unsigned int) rp;
result = (unsigned int) int86x(EMM_INT, &inregs, &outregs,
&segregs) >> 8;
return(result);
}
EMSGetMapAddrArray(mpaa, mpa_cnt) /*получить массив отображаемых
физических адресов*/
MAP_PHYS_PAGE *mpaa; /*указатель на массив отображаемых
физических адресов*/
unsigned int *mpa_cnt; /*кол-во возвращенных элементов*/
{
segread(&segregs); /*заполнить регистры сегментов*/
inregs.x.ax =0x5800; /*функция "Получить массив
отображаемых физических адресов"*/
inregs.x.di = (unsigned int) mpaa;
segregs.es = segregs.ds;
result = (unsigned int) int86x(EMM_INT, &inregs, &outregs,
&segregs) >> 8;
if (!result) >> 8); /*функция завершилась успешно*/
*mpa_cnt = outregs.x.cx; /*возврат кол-ва отображаемых
физических страниц*/
return(result);
}
EMSGetMapAddrCount(mpa_cnt) /*получить кол-во отображаемых
физических адресов*/
unsigned int *mpa_cnt; /*кол-во отображаемых физических
страниц*/
{
inregs.x.ax =0x5801; /*функция "Получить кол-во
отображаемых физических адресов"*/
result = (unsigned int) int86(EMM_INT, &inregs, &outregs) >>8;
if (!result) /*функция завершилась успешно*/
*mpa_cnt = outregs.x.cx; /*возврат кол-ва отображаемых
физических страниц*/
return(result);
}
- 7-67 -
EMSGetHardwareInfo(hwp) /*получить информацию об обору-
довании спецификации расширенной памяти*/
HARDWARE_INFO *hwp; /*указатель на область для получе-
ния информации об оборудовании*/
{
segread(&segregs); /*заполнить регистры сегментов*/
inregs.x.ax =0x5900; /*функция "Получить информацию об
оборудовании спецификации расширенной памяти*/
inregs.x.di = (unsigned int) hwp;
segregs.es = segregs.ds;
result = (unsigned int) int86x(EMM_INT, &inregs, &outregs,
&segregs) >> 8;
return(result);
}
EMSGetRawPageCount(rpg_cnt, urpg_cnt) /*получить кол-во исходных
страниц*/
unsigned int *rpg_cnt; /*кол-во исходных страниц*/
unsigned int *urpg_cnt; /*кол-во неразмещенных исходных страниц*/