1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
/* 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;
}
|