12 #define __STDC_FORMAT_MACROS // Required for format specifiers
14 #include <netinet/in.h>
16 #include <sys/types.h>
23 #define INITTIMEOUT 10000 // ms
24 #define REPEATTIMEOUT 1000 // ms
41 name = Name ? strdup(Name) : NULL;
66 if (Key !=
kNone || NewCode)
116 for (
int i = km->
NumKeys(); --i > 0; ) {
127 snprintf(buffer,
sizeof(buffer),
"%016"PRIX64, Code);
128 return Put(buffer, Repeat, Release);
221 {
kfF1, 0x0000001B5B31317EULL },
222 {
kfF2, 0x0000001B5B31327EULL },
223 {
kfF3, 0x0000001B5B31337EULL },
224 {
kfF4, 0x0000001B5B31347EULL },
225 {
kfF5, 0x0000001B5B31357EULL },
226 {
kfF6, 0x0000001B5B31377EULL },
227 {
kfF7, 0x0000001B5B31387EULL },
228 {
kfF8, 0x0000001B5B31397EULL },
229 {
kfF9, 0x0000001B5B32307EULL },
230 {
kfF10, 0x0000001B5B32317EULL },
231 {
kfF11, 0x0000001B5B32327EULL },
232 {
kfF12, 0x0000001B5B32337EULL },
233 {
kfUp, 0x00000000001B5B41ULL },
234 {
kfDown, 0x00000000001B5B42ULL },
235 {
kfLeft, 0x00000000001B5B44ULL },
236 {
kfRight, 0x00000000001B5B43ULL },
237 {
kfHome, 0x00000000001B5B48ULL },
238 {
kfEnd, 0x00000000001B5B46ULL },
239 {
kfPgUp, 0x000000001B5B357EULL },
240 {
kfPgDown, 0x000000001B5B367EULL },
241 {
kfIns, 0x000000001B5B327EULL },
242 {
kfDel, 0x000000001B5B337EULL },
243 {
kfNone, 0x0000000000000000ULL }
253 tcgetattr(STDIN_FILENO, &
savedTm);
255 if (tcgetattr(STDIN_FILENO, &tm) == 0) {
257 tm.c_lflag &= ~(ICANON | ECHO);
260 tcsetattr(STDIN_FILENO, TCSANOW, &tm);
270 tcsetattr(STDIN_FILENO, TCSANOW, &
savedTm);
284 return (Func <= 0xFF) ? Func : 0;
309 if (Poller.
Poll(50)) {
351 }
while (key1 != 0x7E);
369 uint64_t FirstCommand = 0;
370 uint64_t LastCommand = 0;
371 bool Delayed =
false;
377 if (Command == LastCommand) {
390 else if (Command == FirstCommand) {
400 FirstCommand = Command;
406 PutKey(LastCommand,
false,
true);
409 else if (Delayed && FirstCommand) {
417 LastCommand = Command;