Change-Id: If881ec130833c7e7e62caa3d31e350a531f5bc8e Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Reviewed-on: http://review.coreboot.org/12398 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Public Domain Curses */
 | 
						|
 | 
						|
#include "pdcx11.h"
 | 
						|
 | 
						|
RCSID("$Id: pdckbd.c,v 1.62 2008/07/14 04:24:52 wmcbrine Exp $")
 | 
						|
 | 
						|
/*man-start**************************************************************
 | 
						|
 | 
						|
  Name:                                                         pdckbd
 | 
						|
 | 
						|
  Synopsis:
 | 
						|
        unsigned long PDC_get_input_fd(void);
 | 
						|
 | 
						|
  Description:
 | 
						|
        PDC_get_input_fd() returns the file descriptor that PDCurses
 | 
						|
        reads its input from. It can be used for select().
 | 
						|
 | 
						|
  Portability                                X/Open    BSD    SYS V
 | 
						|
        PDC_get_input_fd                        -       -       -
 | 
						|
 | 
						|
**man-end****************************************************************/
 | 
						|
 | 
						|
/* check if a key or mouse event is waiting */
 | 
						|
 | 
						|
bool PDC_check_key(void)
 | 
						|
{
 | 
						|
    struct timeval socket_timeout = {0};
 | 
						|
    int s;
 | 
						|
 | 
						|
    /* Is something ready to be read on the socket ? Must be a key. */
 | 
						|
 | 
						|
    FD_ZERO(&xc_readfds);
 | 
						|
    FD_SET(xc_key_sock, &xc_readfds);
 | 
						|
 | 
						|
    if ((s = select(FD_SETSIZE, (FD_SET_CAST)&xc_readfds, NULL,
 | 
						|
        NULL, &socket_timeout)) < 0)
 | 
						|
        XCursesExitCursesProcess(3, "child - exiting from "
 | 
						|
                                    "PDC_check_key select failed");
 | 
						|
 | 
						|
    PDC_LOG(("%s:PDC_check_key() - returning %s\n", XCLOGMSG,
 | 
						|
             s ? "TRUE" : "FALSE"));
 | 
						|
 | 
						|
    return !!s;
 | 
						|
}
 | 
						|
 | 
						|
/* return the next available key or mouse event */
 | 
						|
 | 
						|
int PDC_get_key(void)
 | 
						|
{
 | 
						|
    unsigned long newkey = 0;
 | 
						|
    int key = 0;
 | 
						|
 | 
						|
    if (XC_read_socket(xc_key_sock, &newkey, sizeof(unsigned long)) < 0)
 | 
						|
        XCursesExitCursesProcess(2, "exiting from PDC_get_key");
 | 
						|
 | 
						|
    pdc_key_modifiers = (newkey >> 24) & 0xFF;
 | 
						|
    key = (int)(newkey & 0x00FFFFFF);
 | 
						|
 | 
						|
    if (key == KEY_MOUSE && SP->key_code)
 | 
						|
    {
 | 
						|
        if (XC_read_socket(xc_key_sock, &pdc_mouse_status,
 | 
						|
            sizeof(MOUSE_STATUS)) < 0)
 | 
						|
            XCursesExitCursesProcess(2, "exiting from PDC_get_key");
 | 
						|
    }
 | 
						|
 | 
						|
    PDC_LOG(("%s:PDC_get_key() - key %d returned\n", XCLOGMSG, key));
 | 
						|
 | 
						|
    return key;
 | 
						|
}
 | 
						|
 | 
						|
unsigned long PDC_get_input_fd(void)
 | 
						|
{
 | 
						|
    PDC_LOG(("PDC_get_input_fd() - called\n"));
 | 
						|
 | 
						|
    return xc_key_sock;
 | 
						|
}
 | 
						|
 | 
						|
void PDC_set_keyboard_binary(bool on)
 | 
						|
{
 | 
						|
    PDC_LOG(("PDC_set_keyboard_binary() - called\n"));
 | 
						|
}
 | 
						|
 | 
						|
/* discard any pending keyboard or mouse input -- this is the core
 | 
						|
   routine for flushinp() */
 | 
						|
 | 
						|
void PDC_flushinp(void)
 | 
						|
{
 | 
						|
    PDC_LOG(("PDC_flushinp() - called\n"));
 | 
						|
 | 
						|
    while (PDC_check_key())
 | 
						|
        PDC_get_key();
 | 
						|
}
 | 
						|
 | 
						|
int PDC_mouse_set(void)
 | 
						|
{
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int PDC_modifiers_set(void)
 | 
						|
{
 | 
						|
    return OK;
 | 
						|
}
 |