Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
191 lines (170 loc) · 4.77 KB

checkkeys.c

File metadata and controls

191 lines (170 loc) · 4.77 KB
 
Apr 26, 2001
Apr 26, 2001
1
2
3
4
5
6
7
8
9
10
11
12
/* Simple program: Loop, watching keystrokes
Note that you need to call SDL_PollEvent() or SDL_WaitEvent() to
pump the event loop and catch keystrokes.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "SDL.h"
Sep 28, 2005
Sep 28, 2005
13
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
Jul 10, 2006
Jul 10, 2006
14
15
static void
quit(int rc)
Sep 28, 2005
Sep 28, 2005
16
{
Jul 10, 2006
Jul 10, 2006
17
18
SDL_Quit();
exit(rc);
Sep 28, 2005
Sep 28, 2005
19
20
}
Jul 10, 2006
Jul 10, 2006
21
static void
Mar 10, 2011
Mar 10, 2011
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
print_string(char **text, size_t *maxlen, const char *fmt, ...)
{
int len;
va_list ap;
va_start(ap, fmt);
len = SDL_vsnprintf(*text, *maxlen, fmt, ap);
if (len > 0) {
*text += len;
if (len < *maxlen) {
*maxlen -= len;
} else {
*maxlen = 0;
}
}
va_end(ap);
}
static void
print_modifiers(char **text, size_t *maxlen)
Apr 26, 2001
Apr 26, 2001
42
{
Jul 10, 2006
Jul 10, 2006
43
int mod;
Mar 10, 2011
Mar 10, 2011
44
print_string(text, maxlen, " modifiers:");
Jul 10, 2006
Jul 10, 2006
45
46
mod = SDL_GetModState();
if (!mod) {
Mar 10, 2011
Mar 10, 2011
47
print_string(text, maxlen, " (none)");
Jul 10, 2006
Jul 10, 2006
48
49
50
return;
}
if (mod & KMOD_LSHIFT)
Mar 10, 2011
Mar 10, 2011
51
print_string(text, maxlen, " LSHIFT");
Jul 10, 2006
Jul 10, 2006
52
if (mod & KMOD_RSHIFT)
Mar 10, 2011
Mar 10, 2011
53
print_string(text, maxlen, " RSHIFT");
Jul 10, 2006
Jul 10, 2006
54
if (mod & KMOD_LCTRL)
Mar 10, 2011
Mar 10, 2011
55
print_string(text, maxlen, " LCTRL");
Jul 10, 2006
Jul 10, 2006
56
if (mod & KMOD_RCTRL)
Mar 10, 2011
Mar 10, 2011
57
print_string(text, maxlen, " RCTRL");
Jul 10, 2006
Jul 10, 2006
58
if (mod & KMOD_LALT)
Mar 10, 2011
Mar 10, 2011
59
print_string(text, maxlen, " LALT");
Jul 10, 2006
Jul 10, 2006
60
if (mod & KMOD_RALT)
Mar 10, 2011
Mar 10, 2011
61
print_string(text, maxlen, " RALT");
Feb 5, 2008
Feb 5, 2008
62
if (mod & KMOD_LGUI)
Mar 10, 2011
Mar 10, 2011
63
print_string(text, maxlen, " LGUI");
Feb 5, 2008
Feb 5, 2008
64
if (mod & KMOD_RGUI)
Mar 10, 2011
Mar 10, 2011
65
print_string(text, maxlen, " RGUI");
Jul 10, 2006
Jul 10, 2006
66
if (mod & KMOD_NUM)
Mar 10, 2011
Mar 10, 2011
67
print_string(text, maxlen, " NUM");
Jul 10, 2006
Jul 10, 2006
68
if (mod & KMOD_CAPS)
Mar 10, 2011
Mar 10, 2011
69
print_string(text, maxlen, " CAPS");
Jul 10, 2006
Jul 10, 2006
70
if (mod & KMOD_MODE)
Mar 10, 2011
Mar 10, 2011
71
print_string(text, maxlen, " MODE");
Apr 26, 2001
Apr 26, 2001
72
73
}
Jul 10, 2006
Jul 10, 2006
74
static void
Feb 7, 2011
Feb 7, 2011
75
PrintKey(SDL_Keysym * sym, SDL_bool pressed, SDL_bool repeat)
Apr 26, 2001
Apr 26, 2001
76
{
Mar 10, 2011
Mar 10, 2011
77
78
79
80
81
82
83
char message[512];
char *spot;
size_t left;
spot = message;
left = sizeof(message);
Jul 10, 2006
Jul 10, 2006
84
85
/* Print the keycode, name and state */
if (sym->sym) {
Mar 10, 2011
Mar 10, 2011
86
87
88
89
90
91
print_string(&spot, &left,
"Key %s: scancode %d = %s, keycode 0x%08X = %s ",
pressed ? "pressed " : "released",
sym->scancode,
SDL_GetScancodeName(sym->scancode),
sym->sym, SDL_GetKeyName(sym->sym));
Jul 10, 2006
Jul 10, 2006
92
} else {
Mar 10, 2011
Mar 10, 2011
93
94
95
96
97
print_string(&spot, &left,
"Unknown Key (scancode %d = %s) %s ",
sym->scancode,
SDL_GetScancodeName(sym->scancode),
pressed ? "pressed" : "released");
Jul 10, 2006
Jul 10, 2006
98
}
Apr 26, 2001
Apr 26, 2001
99
Jul 10, 2006
Jul 10, 2006
100
101
102
103
/* Print the translated character, if one exists */
if (sym->unicode) {
/* Is it a control-character? */
if (sym->unicode < ' ') {
Mar 10, 2011
Mar 10, 2011
104
print_string(&spot, &left, " (^%c)", sym->unicode + '@');
Jul 10, 2006
Jul 10, 2006
105
} else {
Apr 26, 2001
Apr 26, 2001
106
#ifdef UNICODE
Mar 10, 2011
Mar 10, 2011
107
print_string(&spot, &left, " (%c)", sym->unicode);
Apr 26, 2001
Apr 26, 2001
108
#else
Jul 10, 2006
Jul 10, 2006
109
110
/* This is a Latin-1 program, so only show 8-bits */
if (!(sym->unicode & 0xFF00))
Mar 10, 2011
Mar 10, 2011
111
print_string(&spot, &left, " (%c)", sym->unicode);
Jul 10, 2006
Jul 10, 2006
112
else
Mar 10, 2011
Mar 10, 2011
113
print_string(&spot, &left, " (0x%X)", sym->unicode);
Apr 26, 2001
Apr 26, 2001
114
#endif
Jul 10, 2006
Jul 10, 2006
115
116
}
}
Mar 10, 2011
Mar 10, 2011
117
print_modifiers(&spot, &left);
Jul 21, 2010
Jul 21, 2010
118
if (repeat) {
Mar 10, 2011
Mar 10, 2011
119
print_string(&spot, &left, " (repeat)");
Jul 21, 2010
Jul 21, 2010
120
}
Mar 10, 2011
Mar 10, 2011
121
SDL_Log("%s", message);
Apr 26, 2001
Apr 26, 2001
122
123
}
Jan 15, 2008
Jan 15, 2008
124
125
126
static void
PrintText(char *text)
{
Mar 10, 2011
Mar 10, 2011
127
SDL_Log("Text: %s", text);
Jan 15, 2008
Jan 15, 2008
128
129
}
Mar 10, 2011
Mar 10, 2011
130
131
132
133
#if __IPHONEOS__
extern DECLSPEC int SDLCALL SDL_iPhoneKeyboardShow(SDL_Window * window);
#endif
Jul 10, 2006
Jul 10, 2006
134
135
int
main(int argc, char *argv[])
Apr 26, 2001
Apr 26, 2001
136
{
Mar 10, 2011
Mar 10, 2011
137
SDL_Window *window;
Jul 10, 2006
Jul 10, 2006
138
139
SDL_Event event;
int done;
Apr 26, 2001
Apr 26, 2001
140
Jul 10, 2006
Jul 10, 2006
141
142
143
144
145
/* Initialize SDL */
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
return (1);
}
Apr 26, 2001
Apr 26, 2001
146
Jul 10, 2006
Jul 10, 2006
147
/* Set 640x480 video mode */
Mar 10, 2011
Mar 10, 2011
148
149
150
151
152
window = SDL_CreateWindow("CheckKeys Test",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
640, 480, 0);
if (!window) {
fprintf(stderr, "Couldn't create 640x480 window: %s\n",
Jul 10, 2006
Jul 10, 2006
153
154
155
SDL_GetError());
quit(2);
}
Apr 26, 2001
Apr 26, 2001
156
Mar 10, 2011
Mar 10, 2011
157
158
159
160
161
162
163
#if __IPHONEOS__
/* Creating the context creates the view, which we need to show keyboard */
SDL_GL_CreateContext(window);
SDL_iPhoneKeyboardShow(window);
#endif
Jul 10, 2006
Jul 10, 2006
164
165
166
167
168
169
170
171
/* Watch keystrokes */
done = 0;
while (!done) {
/* Check for events */
SDL_WaitEvent(&event);
switch (event.type) {
case SDL_KEYDOWN:
case SDL_KEYUP:
Jul 21, 2010
Jul 21, 2010
172
PrintKey(&event.key.keysym, event.key.state, event.key.repeat);
Jul 10, 2006
Jul 10, 2006
173
break;
Jan 15, 2008
Jan 15, 2008
174
175
176
case SDL_TEXTINPUT:
PrintText(event.text.text);
break;
Jul 10, 2006
Jul 10, 2006
177
178
179
180
181
182
183
184
185
case SDL_MOUSEBUTTONDOWN:
/* Any button press quits the app... */
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
Sep 28, 2005
Sep 28, 2005
186
Jul 10, 2006
Jul 10, 2006
187
188
SDL_Quit();
return (0);
Apr 26, 2001
Apr 26, 2001
189
}
Mar 10, 2011
Mar 10, 2011
190
191
/* vi: set ts=4 sw=4 expandtab: */