#include    <stdio.h>
#include    <fcntl.h>
#include    <io.h>
#include    <conio.h>
#include    <dos.h>

// Описание функций
int main(int argc, char * argv[]);
int Hello(void);

// Следующие функции определены в файле CHARGEN.ASM
void __pascal __far OpenMap2(void);
void __pascal __far CloseMap2(void);

//=======================================================
// Главная функция
//=======================================================
int main(int argc, char *argv[])
{
	// Записываем в указатель lpGlyph адрес начала видеопамяти
	unsigned char __far *lpGlyph =
		(unsigned char __far *)(0xA0000000L);

	int	hFile;
	int	vmode;
	union REGS	inregs, outregs;

	// Проверка командной строки программы
	if(argc != 3)
	{
		Hello();
		return -1;
	}

	// Записываем в переменную vmode параметр <режим>
	sscanf(argv[1],"%d",&vmode);

	// Если указан графический режим, завершаем программу
	if(vmode > 3 && vmode != 7)
		return(-2);

	// Устанавливаем режим vmode
	inregs.h.ah = 0x0;
	inregs.h.al = vmode;
	int86( 0x10, &inregs, &outregs );

	// Открываем файл, имя которого задано
	// параметром <файл>.
	hFile = _open( argv[2], O_RDONLY | O_BINARY);

	if(hFile < 0)
	{
		printf("Файл '%s' не может быть открыт \n", argv[2]);
		return -3;
	}

	// Получаем доступ ко второму цветовому слою, в
	// котором записаны таблицы знакогенератора
	OpenMap2();

	// Записываем во второй слой видеопамяти первую
	// таблицу знакогенератора, записанную в файле <файл>
	// таблица знакогенератора содержит описания 256 символов,
	// описание каждого символа занимает 32 байта
	_read( hFile, lpGlyph, 256*31 );

	// Восстанавливаем нормальную структуру видеопамяти
	// текстового режима
	CloseMap2();

	// Закрываем файл
	 _close( hFile );

	return 0;
}

//==============================================================
// Функция выводит на экран краткую справку о программе
//==============================================================
int Hello(void) {

	printf("\nCopyright (C)Frolov G.V.,1995. E-mail: frolov@glas.apc.org\n"
			 "\nФормат вызова: READGEN <режим> <файл>"
			 "\n   <режим>: любые текстовые режимы"
			 "\n   <файл>: имя файла, в который записывается таблица символов"
			 );

	return 0;
}
