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