OOStuBS - Technische Informatik II (TI-II)  2.4
key.h
gehe zur Dokumentation dieser Datei
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
2  * Technische Informatik II *
3  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4  * *
5  * K E Y *
6  * *
7 \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
8 
9 #ifndef __Key_include__
10 #define __Key_include__
11 
15 class Key {
16  private:
17  unsigned char asc;
18  unsigned char scan;
19  unsigned char modi;
20 
21  struct mbit {
22  enum {
23  shift = 1,
24  alt_left = 2,
25  alt_right = 4,
26  ctrl_left = 8,
27  ctrl_right = 16,
28  caps_lock = 32,
29  num_lock = 64,
31  };
32  };
33 
34  public:
39  Key () : asc (0), scan (0), modi (0) {}
40 
45  bool valid (){
46  return scan != 0;
47  }
48 
53  void invalidate () {
54  scan = 0;
55  }
56 
61  void ascii (unsigned char a) {
62  asc = a;
63  }
64 
69  void scancode (unsigned char s) {
70  scan = s;
71  }
72 
77  unsigned char ascii () const {
78  return asc;
79  }
80 
85  unsigned char scancode () const {
86  return scan;
87  }
88 
89  void shift (bool pressed){
90  modi = pressed ? modi | mbit::shift : modi & ~mbit::shift;
91  }
92  void alt_left (bool pressed){
93  modi = pressed ? modi | mbit::alt_left : modi & ~mbit::alt_left;
94  }
95  void alt_right (bool pressed){
96  modi = pressed ? modi | mbit::alt_right : modi & ~mbit::alt_right;
97  }
98  void ctrl_left (bool pressed){
99  modi = pressed ? modi | mbit::ctrl_left : modi & ~mbit::ctrl_left;
100  }
101  void ctrl_right (bool pressed){
102  modi = pressed ? modi | mbit::ctrl_right : modi & ~mbit::ctrl_right;
103  }
104  void caps_lock (bool pressed){
105  modi = pressed ? modi | mbit::caps_lock : modi & ~mbit::caps_lock;
106  }
107  void num_lock (bool pressed){
108  modi = pressed ? modi | mbit::num_lock : modi & ~mbit::num_lock;
109  }
110  void scroll_lock (bool pressed){
111  modi = pressed ? modi | mbit::scroll_lock : modi & ~mbit::scroll_lock;
112  }
113 
114  // methods to get the information of the keys: SHIFT, ALT, CTRL, ...
115  bool shift (){
116  return modi & mbit::shift;
117  }
118  bool alt_left (){
119  return modi & mbit::alt_left;
120  }
121  bool alt_right (){
122  return modi & mbit::alt_right;
123  }
124  bool ctrl_left (){
125  return modi & mbit::ctrl_left;
126  }
127  bool ctrl_right (){
128  return modi & mbit::ctrl_right;
129  }
130  bool caps_lock (){
131  return modi & mbit::caps_lock;
132  }
133  bool num_lock (){
134  return modi & mbit::num_lock;
135  }
136  bool scroll_lock (){
137  return modi & mbit::scroll_lock;
138  }
139  bool alt (){
140  return alt_left () | alt_right ();
141  }
142  bool ctrl (){
143  return ctrl_left () | ctrl_right ();
144  }
145 
152  operator char (){
153  return (char) asc;
154  }
155 
163  struct scan {
164  enum {
165  f1 = 0x3d,
166  del = 0x53,
167  back = 0x66,
168  up = 72,
169  down = 80,
170  left = 75,
171  right = 77,
172  div = 8
173  };
174  };
175 };
176 
177 #endif