aboutsummaryrefslogtreecommitdiffstats
path: root/distrib/sdl-1.2.15/test/checkkeys.c
diff options
context:
space:
mode:
Diffstat (limited to 'distrib/sdl-1.2.15/test/checkkeys.c')
-rw-r--r--distrib/sdl-1.2.15/test/checkkeys.c146
1 files changed, 146 insertions, 0 deletions
diff --git a/distrib/sdl-1.2.15/test/checkkeys.c b/distrib/sdl-1.2.15/test/checkkeys.c
new file mode 100644
index 0000000..8dbb24f
--- /dev/null
+++ b/distrib/sdl-1.2.15/test/checkkeys.c
@@ -0,0 +1,146 @@
+
+/* 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"
+
+/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
+static void quit(int rc)
+{
+ SDL_Quit();
+ exit(rc);
+}
+
+static void print_modifiers(void)
+{
+ int mod;
+ printf(" modifiers:");
+ mod = SDL_GetModState();
+ if(!mod) {
+ printf(" (none)");
+ return;
+ }
+ if(mod & KMOD_LSHIFT)
+ printf(" LSHIFT");
+ if(mod & KMOD_RSHIFT)
+ printf(" RSHIFT");
+ if(mod & KMOD_LCTRL)
+ printf(" LCTRL");
+ if(mod & KMOD_RCTRL)
+ printf(" RCTRL");
+ if(mod & KMOD_LALT)
+ printf(" LALT");
+ if(mod & KMOD_RALT)
+ printf(" RALT");
+ if(mod & KMOD_LMETA)
+ printf(" LMETA");
+ if(mod & KMOD_RMETA)
+ printf(" RMETA");
+ if(mod & KMOD_NUM)
+ printf(" NUM");
+ if(mod & KMOD_CAPS)
+ printf(" CAPS");
+ if(mod & KMOD_MODE)
+ printf(" MODE");
+}
+
+static void PrintKey(SDL_keysym *sym, int pressed)
+{
+ /* Print the keycode, name and state */
+ if ( sym->sym ) {
+ printf("Key %s: %d-%s ", pressed ? "pressed" : "released",
+ sym->sym, SDL_GetKeyName(sym->sym));
+ } else {
+ printf("Unknown Key (scancode = %d) %s ", sym->scancode,
+ pressed ? "pressed" : "released");
+ }
+
+ /* Print the translated character, if one exists */
+ if ( sym->unicode ) {
+ /* Is it a control-character? */
+ if ( sym->unicode < ' ' ) {
+ printf(" (^%c)", sym->unicode+'@');
+ } else {
+#ifdef UNICODE
+ printf(" (%c)", sym->unicode);
+#else
+ /* This is a Latin-1 program, so only show 8-bits */
+ if ( !(sym->unicode & 0xFF00) )
+ printf(" (%c)", sym->unicode);
+ else
+ printf(" (0x%X)", sym->unicode);
+#endif
+ }
+ }
+ print_modifiers();
+ printf("\n");
+}
+
+int main(int argc, char *argv[])
+{
+ SDL_Event event;
+ int done;
+ Uint32 videoflags;
+
+ /* Initialize SDL */
+ if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
+ fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
+ return(1);
+ }
+
+ videoflags = SDL_SWSURFACE;
+ while( argc > 1 ) {
+ --argc;
+ if ( argv[argc] && !strcmp(argv[argc], "-fullscreen") ) {
+ videoflags |= SDL_FULLSCREEN;
+ } else {
+ fprintf(stderr, "Usage: %s [-fullscreen]\n", argv[0]);
+ quit(1);
+ }
+ }
+
+ /* Set 640x480 video mode */
+ if ( SDL_SetVideoMode(640, 480, 0, videoflags) == NULL ) {
+ fprintf(stderr, "Couldn't set 640x480 video mode: %s\n",
+ SDL_GetError());
+ quit(2);
+ }
+
+ /* Enable UNICODE translation for keyboard input */
+ SDL_EnableUNICODE(1);
+
+ /* Enable auto repeat for keyboard input */
+ SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,
+ SDL_DEFAULT_REPEAT_INTERVAL);
+
+ /* Watch keystrokes */
+ done = 0;
+ while ( !done ) {
+ /* Check for events */
+ SDL_WaitEvent(&event);
+ switch (event.type) {
+ case SDL_KEYDOWN:
+ PrintKey(&event.key.keysym, 1);
+ break;
+ case SDL_KEYUP:
+ PrintKey(&event.key.keysym, 0);
+ break;
+ case SDL_MOUSEBUTTONDOWN:
+ /* Any button press quits the app... */
+ case SDL_QUIT:
+ done = 1;
+ break;
+ default:
+ break;
+ }
+ }
+
+ SDL_Quit();
+ return(0);
+}