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;
 | |
| }
 |