Немного не так это делается. По крайней мере я не так делаю.
Сделайте буфер нажатых клавиш. Реализуйте функции типа
put_key,
check_key и
get_key.
put_key это функция сканирования клавиатуры, устранения дребезга и размещения в буфере клавиатуры скан-кода нажатой клавиши (проще всего по табличному принципу). Она же может реализовывать автоповтор нажатой клавиши и обработку нажатия нескольких клавиш (типа ALT + key, CTRL + key и т.п). Количество клавиш ограничено только аппартной реализацией клавиатуры. Буфер клавитуры может иметь любой размер. Буфер циклический. Для помещения и извлечения кодов клавиш используется счетчик скан-кодов и указатель на текущий скан-код. Естественно указатели ограничиваются сверху размером буфера. При равенстве счетчика и указателя (все коды из буфера извлечены) их значения устанавливаются на начало буфера.
Вызывается putkey желательно не менее 6 раз/сек, но не чаще длительности дребезга клавиш (обычно не чаще 100 раз/сек, т.к. чаще ни одна даже профессиональная машинистка не сможет нажимать ИМХО

). Вызов ее на какое-нибудь прерывание с подходящим периодом подвешивают.
check_key возвращает NULL если в буфере нет ни одного кода клавиши или текущий код клавиши. Указатель на текущий скан-код в буфере и счетчик кодов при этом не изменяется.
get_key возвращает NULL если в буфере нет ни одного кода клавиши или текущий код клавиши. Указатель на текущий скан-код в буфере и счетчик кодов при этом изменяются.
Я не привожу здесь какого-либо программного кода по двум причинам. Во-первых, нет под рукой. Во-вторых, считаю, что лучше уяснить принцип и хотя бы один раз написать самому для полного понимания