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