Пример #1
0
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;
}
Пример #2
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);
}