Программирование видеоадаптеров CGA, EGA и VGA© Александр Фролов, Григорий ФроловТом 3, М.: Диалог-МИФИ, 1992, 287 стр. 14.11. Функции _setactivepage(), _setvisualpage(), _getactivepage() и _getvisualpage()Функции применяются, для управления видеоадаптерами в режимах с несколькими страницами видеопамяти. Они обеспечивают возможность подготовки изображения на неактивной странице видеопамяти, а затем быстрого его вывода на экран. Функция _setactivepage() направляет вывод информаци в определенную страницу видеопамяти, а функция _setvisualpage() задает страницу, которая отображается в данный момент на экране. Функции управления страницами видеопамяти могут использоваться совместно с функциями _gettextcursor(), _settextcursor(), _settextposition(), _gettextposition(), _outtext(), _gettextcolor(), _settextcolor(), _settextwindow(). Функция управления страницами видеопамяти имеет следующий прототип: short _setactivepage( short page ); Параметр функции задает активную страницу, в которую будет направлен весь последующий вывод. Если функция выполнилась успешно, то она возвращает номер предыдущей активной страницы. При возникновении ошибки возвращаемая величина равна -1. Ошибка может произойти в случае задания номера страницы видеопамяти, не поддерживаемого адаптером в данном режиме. Приведем прототип функции: short _setvisualpage( short page ); Параметр функции задает номер страницы, отображаемой на экране дисплея. Функция возвращает номер предыдущей отображаемой страницы. При возникновении ошибки возвращаемая величина равна -1. Ошибка может произойти, например, в случае задания номера страницы видеопамяти, не поддержиеваемой адаптером. Смена отображаемой страницы в этом случае не происходит. short _getactivepage( void ); Функция _getactivepage() возвращает номер текущей активной страницы видеопамяти. Следующая функция, _getvisualpage(), возвращает номер страницы видеопамяти, отображаемой на экране дисплея в данный момент. Ее прототип: short _getvisualpage( void ); В приведенном ниже примере определяется число страниц видеопамяти, в каждую страницу записывается ее номер и затем по очереди отображаются все страницы экрана.
// Пример использования функций _setactivepage(), _setvisualpage(),
// _getactivepage() и _getvisualpage().
#include <stdlib.h>
#include <graph.h>
#include <time.h>
void main(void)
{
short old_vpage, old_apage,
page, row;
struct videoconfig vc;
char buffer[80];
long wait = 0;
clock_t end;
// определяем конфигурацию видеосистемы
_getvideoconfig(&vc);
// завершаем программу, если поддерживается только одна
// страница видеопамяти
if(vc.numvideopages<2)
exit(1);
// сохраняем номера активной и отображаемой страниц видеопамяти
old_apage = _getactivepage();
old_vpage = _getvisualpage();
// записываем на каждой из страниц ее номер
for(page = 0; page < vc.numvideopages; page++) {
// изменяем активную страницу видеопамяти
_setactivepage(page);
_clearscreen(_GCLEARSCREEN);
sprintf(buffer, "страница видеопамяти номер %d", page);
for(row = page + 1; row < 26; row += vc.numvideopages) {
_settextposition(row, 35);
_outtext(buffer);
}
}
while(!kbhit())
for(page = 0; page < vc.numvideopages; page++) {
// меняем отображаемую страницу видеопамяти
_setvisualpage(page);
// производим постепенно увеличивающуюся задержку
for(end = clock() + wait++; clock() < end;);
}
getch();
// восстанавливаем активную и отображаемую страницы
_setactivepage(old_apage);
_setvisualpage(old_vpage);
}
|

