#include <conio.h>
#include <stdio.h>
#include <graph.h>

short modes[] = { _TEXTBW40,     _TEXTC40,      _TEXTBW80,
						_TEXTC80,      _MRES4COLOR,   _MRESNOCOLOR,
						_HRESBW,       _TEXTMONO,     _HERCMONO,
						_MRES16COLOR,  _HRES16COLOR,  _ERESNOCOLOR,
						_ERESCOLOR,    _VRES2COLOR,   _VRES16COLOR,
						_MRES256COLOR, _ORESCOLOR
					 };
char *names[] = { "TEXTBW40",    "TEXTC40",     "TEXTBW80",
						"TEXTC80",     "MRES4COLOR",  "MRESNOCOLOR",
						"HRESBW",      "TEXTMONO",    "HERCMONO",
						"MRES16COLOR", "HRES16COLOR", "ERESNOCOLOR",
						"ERESCOLOR",   "VRES2COLOR",  "VRES16COLOR",
						"MRES256COLOR","ORESCOLOR"
					  };

void main()
{
	 short c, i, j, x, y, row, num = sizeof(modes) / sizeof(modes[0]), mode_num;
	 struct videoconfig vc;
	 char b[500];                        /* Buffer for string        */

	_displaycursor( _GCURSOROFF );

	for(mode_num = 0; mode_num <= num; mode_num++) {
		row = _setvideomoderows(modes[mode_num], _MAXTEXTROWS);

		if(row == 0) continue;

		// заполняем поля структуры vc

		_getvideoconfig( &vc );

		// выводим на экран данные полученные в структуре vc

		printf("\nРежим: %s", names[mode_num]);

		printf("\nВидеоадаптер: ");
		switch(vc.adapter) {
			case _MDPA : puts("MDA.");
							 break;

			case _CGA  : puts("CGA.");
							 break;

			case _EGA  : puts("EGA.");
							break;

			case _VGA  : puts("VGA.");
							break;

			case _MCGA : puts("MCGA.");
							break;

			case _HGC  : puts("Hercules.");
							break;

			default    : puts(" не известный.");
		}

		printf("\nТип дисплея: ");
		switch(vc.monitor) {
			case _MONO        : puts("монохромный.");
									break;

			case _COLOR       : puts("цветной или эмулирующий его.");
									break;

			case _ENHCOLOR    : puts("улучшенный цветной.");
									break;

			case _ANALOGMONO  : puts("монохромный аналоговый.");
									break;

			case _ANALOGCOLOR : puts("цветной аналоговый.");
									break;

			case _ANALOG      : puts("аналоговый.");
									break;

			default           : puts("не известный.");
		}

		printf("\nОбъем видеопамяти %dК байт.", vc.memory );

		printf("\n\nНомер режима: %d.", vc.mode );

		printf("\n\nЧисло доступных страниц видеопамяти: %d.",
				vc.numvideopages );

		// если режим работы видеоадаптера графический

		if(vc.numxpixels) {
			printf("\n\nРазрешающая способность:%dx%d пикселов.",
					vc.numxpixels, vc.numypixels );

			printf("\n\nКоличесво бит на пиксел: %d.", vc.bitsperpixel );
		}

		printf("\n\nЧисло символов на строке: %d.", vc.numtextcols );

		printf("\n\nЧисло строк: %d.", vc.numtextrows );

		printf("\n\nЧисло цветов: %d.", vc.numcolors );

		getch();

	}
	 _displaycursor( _GCURSORON );
	 _setvideomode( _DEFAULTMODE );
}

