// демонстрация использования нескольких страниц видеопамяти

#include <stdlib.h>
#include <graph.h>
#include <time.h>

void main()
{
	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 );
}
