File: inkey.c

package info (click to toggle)
xbat 1.11-9
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,236 kB
  • ctags: 796
  • sloc: ansic: 6,298; makefile: 654; sh: 63
file content (98 lines) | stat: -rw-r--r-- 2,232 bytes parent folder | download
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
#include "xev.h"

PRIVATE int inkey = 0;

void KEClear()
{
      XEvent ev;

      while(XPending(d) > 0)
	XNextEvent(d,&ev);

      inkey = 0;
}

int CheckEvent()
{
      int i, k;
      KeySym ks;
      int oc_exp = 0,push_c = 0,push_s = 0 , push_q = 0, mask;
      
      while (XPending(d) > 0){
	    mask = 0;
	    XNextEvent(d, &e);
	    switch (e.type){
		case Expose:
		  oc_exp = (1<<Exp);
		  break;
		  
		case KeyRelease:
		  switch (XKeycodeToKeysym(d, e.xkey.keycode, 0)){
		      case XK_Up: 
		      case XK_KP_8:
		      case XK_i:
			mask = (1<<Up); break;
		      case XK_Down: 
		      case XK_KP_2:
		      case XK_KP_5:
		      case XK_k:
		      case XK_m:
			mask = (1<<Down); break;
		      case XK_Left: 
		      case XK_KP_4:
		      case XK_j:
			mask = (1<<Left); break;
		      case XK_Right: 
		      case XK_KP_6:
		      case XK_l:
			mask = (1<<Right); break;
		      case XK_x: mask = (rev_key)?(1<<Kx):(1<<Kz); break;
		      case XK_space: mask = 1<<Kx; break;
		      case XK_z: mask = (rev_key)?(1<<Kz):(1<<Kx); break;
		      case XK_Control_L: mask = 1<<Kz; break;
		      case XK_Control_R: mask = 1<<Kz; break;
		      case XK_s: push_s = (1<<Ks); break;
		    case XK_q: push_q = (1<<Kq); break;
		    case XK_Escape: push_q = (1<<Kq); break;
		      case XK_c: push_c = (1<<Kc); break;
		  }
		  inkey &= ~mask;
		  break;
		case KeyPress:
		  switch (XKeycodeToKeysym(d, e.xkey.keycode, 0)){
		      case XK_Up: 
		      case XK_KP_8:
		      case XK_i:
			mask = (1<<Up); break;
		      case XK_Down: 
		      case XK_KP_2:
		      case XK_KP_5:
		      case XK_k:
		      case XK_m:
			mask = (1<<Down); break;
		      case XK_Left: 
		      case XK_KP_4:
		      case XK_j:
			mask = (1<<Left); break;
		      case XK_Right: 
		      case XK_KP_6:
		      case XK_l:
			mask = (1<<Right); break;
		      case XK_x: mask = (rev_key)?(1<<Kx):(1<<Kz); break;
		      case XK_space: mask = 1<<Kx; break;
		      case XK_z: mask = (rev_key)?(1<<Kz):(1<<Kx); break;
		      case XK_Control_L: mask = 1<<Kz; break;
		      case XK_Control_R: mask = 1<<Kz; break;
		  }
		  inkey |= mask;
		  break;
	    }
      }
      return inkey | push_s | push_q | push_c | oc_exp;
}