symbian-qemu-0.9.1-12/libsdl-trunk/test/checkkeys.c
changeset 1 2fb8b9db1c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/libsdl-trunk/test/checkkeys.c	Fri Jul 31 15:01:17 2009 +0100
@@ -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);
+}