static int error (Display *dpy, XErrorEvent *ev) { int o; const char* name = NULL; static char buffer[256]; if (should_ignore (dpy, ev->serial)) return 0; if (ev->request_code == composite_opcode && ev->minor_code == X_CompositeRedirectSubwindows) { fprintf (stderr, "Another composite manager is already running\n"); exit (1); } o = ev->error_code - xfixes_error; switch (o) { case BadRegion: name = "BadRegion"; break; default: break; } o = ev->error_code - damage_error; switch (o) { case BadDamage: name = "BadDamage"; break; default: break; } o = ev->error_code - render_error; switch (o) { case BadPictFormat: name ="BadPictFormat"; break; case BadPicture: name ="BadPicture"; break; case BadPictOp: name ="BadPictOp"; break; case BadGlyphSet: name ="BadGlyphSet"; break; case BadGlyph: name ="BadGlyph"; break; default: break; } if (name == NULL) { buffer[0] = '\0'; XGetErrorText (dpy, ev->error_code, buffer, sizeof (buffer)); name = buffer; } fprintf (stderr, "error %d: %s request %d minor %d serial %lu\n", ev->error_code, (strlen (name) > 0) ? name : "unknown", ev->request_code, ev->minor_code, ev->serial); /* abort (); this is just annoying to most people */ return 0; }
// Handle scancode static void handle_scancode(char scancode_8) { //printk(KERN_INFO "Got scancode %02x in handle_scancode.\n", scancode_8); if (should_ignore(scancode_8)) return; #ifdef DEBUG to_tty_string("[simple_keyboard.c] Handling scancode.\n\r"); #endif // save last scancode keyboard_status.last_scancode = keyboard_status.current_scancode; // update press status keyboard_status.press = is_press(scancode_8); // update current scancode char scancode_7 = get_scancode_7(scancode_8); keyboard_status.current_scancode = scancode_7; // update control scancode if (scancode_7 == SCAN_CAP && keyboard_status.press) { #ifdef DEBUG to_tty_string("[simple_keyboard.c] CAPSLOCK.\n\r"); #endif keyboard_status.caps = !keyboard_status.caps; } if (scancode_7 == SCAN_ALT_L || scancode_7 == SCAN_ALT_R) { #ifdef DEBUG to_tty_string("[simple_keyboard.c] ALT.\n\r"); #endif if (keyboard_status.press) keyboard_status.alt = true; else keyboard_status.alt = false; return; } if (scancode_7 == SCAN_CTRL_L || scancode_7 == SCAN_CTRL_R) { #ifdef DEBUG to_tty_string("[simple_keyboard.c] CTLR.\n\r"); #endif if (keyboard_status.press) keyboard_status.ctrl = true; else keyboard_status.ctrl = false; return; } if (scancode_7 == SCAN_SHIFT_L || scancode_7 == SCAN_SHIFT_R) { #ifdef DEBUG to_tty_string("[simple_keyboard.c] SHIFT.\n\r"); #endif if (keyboard_status.press) keyboard_status.shift = true; else keyboard_status.shift = false; return; } #ifdef DEBUG to_tty_string("[simple_keyboard.c] Normal Key.\n\r"); #endif if (!keyboard_status.press) return; // update keycode keyboard_status.current_ascii = scancode_to_ascii(scancode_7, keyboard_status.shift); to_tty_char(keyboard_status.current_ascii); }