#include <stdio.h>
#include <dos.h>

void main(void);

void main(void) {

	union REGS  rg;
	int   i, zflag;


	for(;;) {

// Выводим в цикле символ '*'

		putchar('*');

// Небольшая задержка во времени

		for(i=0; i<1000; i++);

// Вызываем прерывание INT 16h для проверки буфера клавиатуры

// Устанавливаем флаг, который будет сброшен при нажатии на
// любую клавишу

		zflag = 1;

		_asm {

			mov   ax, 0100h
			int   16h
			jz    nokey       // Если нажатия не было,
									// продолжаем выполнение программы

			mov   zflag, 0    // При нажатии на любую клавишу
									// сбрасываем флаг
nokey:

		}

		if(zflag == 0) {

// Если флаг сброшен, читаем код нажатой клавиши из буфера
// при помощи функции 01h прерывания INT 16h

			rg.h.ah = 0;
			int86(0x16, &rg, &rg);

// Если была нажата клавиша ESC, завершаем работу программы

			if(rg.h.ah == 1) {

// Выводим на экран содержимое регистров AH и AL,
// содержащих, соответственно, скан-код и ASCII-код
// нажатой клавиши.

				printf("\nScan = %02.2X Ascii = %02.2X",
					rg.h.ah,
					rg.h.al);

					break;
			}
			else printf("\nДля завершения нажмите ESC\n");
		}
	}
}
