Here's a version for you, that does what you want.
Don't tell Quzah about the yellow text on a blue background output, because he gets really grumpy when he thinks he knows it all, and finds out he really doesn't.
Note how some keys give off more than one value, so if the first value is a zero, it uses the second value.
Code:
#include <stdio.h>
#define ESC 27
#define F1 59
#define F2 60
#define F3 61
#define F4 62
#define F5 63
#define F6 64
#define F7 65
#define F8 66
#define F9 67
#define F10 68
#define HOME 71
#define UP 72
#define PAGE_UP 73
#define LEFT 75
#define RIGHT 77
#define END 79
#define DOWN 80
#define PAGE_DOWN 81
int main(void) {
char key;
char msg[20];
textbackground(1);
textcolor(14);
printf("\n\n\t\t\t press escape to quit\n\n") ;
do {
key = getch();
if (key == 0) {
key = getch(); //key code has two keys - read the second one
switch (key) {
case F1: memcpy(msg,"F1", sizeof(msg)); break;
case F2: memcpy(msg,"F2", sizeof(msg)); break;
case F3: memcpy(msg,"F3", sizeof(msg)); break;
case F4: memcpy(msg,"F4", sizeof(msg)); break;
case F5: memcpy(msg,"F5", sizeof(msg)); break;
case F6: memcpy(msg,"F6", sizeof(msg)); break;
case F7: memcpy(msg,"F7", sizeof(msg)); break;
case F8: memcpy(msg,"F8", sizeof(msg)); break;
case F9: memcpy(msg,"F9", sizeof(msg)); break;
case F10: memcpy(msg,"F10", sizeof(msg)); break;
case PAGE_UP: memcpy(msg,"PAGE UP", sizeof(msg)); break;
case PAGE_DOWN: memcpy(msg,"PAGE DOWN", sizeof(msg)); break;
case HOME: memcpy(msg,"HOME", sizeof(msg)); break;
case END: memcpy(msg,"END", sizeof(msg)); break;
case UP: memcpy(msg,"UP", sizeof(msg)); break;
case DOWN: memcpy(msg,"DOWN", sizeof(msg)); break;
case LEFT: memcpy(msg,"LEFT", sizeof(msg)); break;
case RIGHT: memcpy(msg,"RIGHT", sizeof(msg)); break;
default: memcpy(msg,"unknown key", sizeof(msg)); break;
}
cprintf("Key: %s", msg);
putchar('\n');
continue;
}
if(key == ESC) {
cprintf("Key: ESCAPE");
putchar('\n');
}
else {
cprintf("Key: %c", key);
putchar('\n');
}
}while (key != ESC);
printf("\n\n\t\t\t press enter when ready");
(void) getchar(); //hold the console window open
return 0;
}
You can't compile this unless you have a non standard compiler extension, that smartly links in the needed header. One like RockLee has.