#include #include #include #include #include #include void cleanup() { } void handle_sigint() { exit(0); } typedef struct pref_key { char label[5]; int code; int det; } pref_key; typedef struct pref_row { int num_keys; pref_key keys[12]; } pref_row; #define NUM_R 5 pref_row ROWS[NUM_R] = { { 12, { { "ESC", 1 }, { "1", 2 }, { "2", 3 }, { "3", 4 }, { "4", 5 }, { "5", 6 }, { "6", 7 }, { "7", 8 }, { "8", 9 }, { "9", 10 }, { "0", 11 }, { "BSP", 14 }, } }, { 12, { { "TAB", 15 }, { "Q", 16 }, { "W", 17 }, { "E", 18 }, { "R", 19 }, { "T", 20 }, { "Y", 21 }, { "U", 22 }, { "I", 23 }, { "O", 24 }, { "P", 25 }, { ";", 39 }, } }, { 12, { { "CTL", 29 }, { "A", 30 }, { "S", 31 }, { "D", 32 }, { "F", 33 }, { "G", 34 }, { "H", 35 }, { "J", 36 }, { "K", 37 }, { "L", 38 }, { "'", 40 }, { "RET", 28 }, } }, { 12, { { "LSH", 42 }, { "Z", 44 }, { "X", 45 }, { "C", 46 }, { "V", 47 }, { "B", 48 }, { "N", 49 }, { "M", 50 }, { ",", 51 }, { ".", 52 }, { "UP", 103}, { "AGR", 100 }, } }, { 12, { { "", 0 }, { "MNT", 125 }, { "ALT", 56 }, { "\\", 43 }, { "=", 13 }, { "SPC", 57 }, { "SPC", 57 }, { "-", 12 }, { "/", 53 }, { "LFT", 105 }, { "DWN", 108 }, { "RGT", 106 }, } }, }; int main(int argc, char** argv) { atexit(cleanup); signal(SIGINT, handle_sigint); if (argc < 2) exit(1); int dev = open(argv[1], O_RDONLY); if (!dev) exit(2); struct input_event e; while (1) { puts("\x1B[2J"); int alldet = 1; for (int y=0; ydet == 1) { printf(" "); } else { printf("%3s ", k->label); alldet = 0; } } printf("\n"); } printf("\n"); if (alldet) break; read(dev, &e, sizeof(e)); if (e.type == 1) { //printf("code: %d value: %d\n", e.code, e.value); for (int y=0; y