symbian-qemu-0.9.1-12/libsdl-trunk/test/checkkeys.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 /* Simple program:  Loop, watching keystrokes
       
     3    Note that you need to call SDL_PollEvent() or SDL_WaitEvent() to 
       
     4    pump the event loop and catch keystrokes.
       
     5 */
       
     6 
       
     7 #include <stdio.h>
       
     8 #include <stdlib.h>
       
     9 #include <string.h>
       
    10 
       
    11 #include "SDL.h"
       
    12 
       
    13 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
       
    14 static void quit(int rc)
       
    15 {
       
    16 	SDL_Quit();
       
    17 	exit(rc);
       
    18 }
       
    19 
       
    20 static void print_modifiers(void)
       
    21 {
       
    22 	int mod;
       
    23 	printf(" modifiers:");
       
    24 	mod = SDL_GetModState();
       
    25 	if(!mod) {
       
    26 		printf(" (none)");
       
    27 		return;
       
    28 	}
       
    29 	if(mod & KMOD_LSHIFT)
       
    30 		printf(" LSHIFT");
       
    31 	if(mod & KMOD_RSHIFT)
       
    32 		printf(" RSHIFT");
       
    33 	if(mod & KMOD_LCTRL)
       
    34 		printf(" LCTRL");
       
    35 	if(mod & KMOD_RCTRL)
       
    36 		printf(" RCTRL");
       
    37 	if(mod & KMOD_LALT)
       
    38 		printf(" LALT");
       
    39 	if(mod & KMOD_RALT)
       
    40 		printf(" RALT");
       
    41 	if(mod & KMOD_LMETA)
       
    42 		printf(" LMETA");
       
    43 	if(mod & KMOD_RMETA)
       
    44 		printf(" RMETA");
       
    45 	if(mod & KMOD_NUM)
       
    46 		printf(" NUM");
       
    47 	if(mod & KMOD_CAPS)
       
    48 		printf(" CAPS");
       
    49 	if(mod & KMOD_MODE)
       
    50 		printf(" MODE");
       
    51 }
       
    52 
       
    53 static void PrintKey(SDL_keysym *sym, int pressed)
       
    54 {
       
    55 	/* Print the keycode, name and state */
       
    56 	if ( sym->sym ) {
       
    57 		printf("Key %s:  %d-%s ", pressed ?  "pressed" : "released",
       
    58 					sym->sym, SDL_GetKeyName(sym->sym));
       
    59 	} else {
       
    60 		printf("Unknown Key (scancode = %d) %s ", sym->scancode,
       
    61 					pressed ?  "pressed" : "released");
       
    62 	}
       
    63 
       
    64 	/* Print the translated character, if one exists */
       
    65 	if ( sym->unicode ) {
       
    66 		/* Is it a control-character? */
       
    67 		if ( sym->unicode < ' ' ) {
       
    68 			printf(" (^%c)", sym->unicode+'@');
       
    69 		} else {
       
    70 #ifdef UNICODE
       
    71 			printf(" (%c)", sym->unicode);
       
    72 #else
       
    73 			/* This is a Latin-1 program, so only show 8-bits */
       
    74 			if ( !(sym->unicode & 0xFF00) )
       
    75 				printf(" (%c)", sym->unicode);
       
    76 			else
       
    77 				printf(" (0x%X)", sym->unicode);
       
    78 #endif
       
    79 		}
       
    80 	}
       
    81 	print_modifiers();
       
    82 	printf("\n");
       
    83 }
       
    84 
       
    85 int main(int argc, char *argv[])
       
    86 {
       
    87 	SDL_Event event;
       
    88 	int done;
       
    89 	Uint32 videoflags;
       
    90 
       
    91 	/* Initialize SDL */
       
    92 	if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
       
    93 		fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
       
    94 		return(1);
       
    95 	}
       
    96 
       
    97 	videoflags = SDL_SWSURFACE;
       
    98 	while( argc > 1 ) {
       
    99 		--argc;
       
   100 		if ( argv[argc] && !strcmp(argv[argc], "-fullscreen") ) {
       
   101 			videoflags |= SDL_FULLSCREEN;
       
   102 		} else {
       
   103 			fprintf(stderr, "Usage: %s [-fullscreen]\n", argv[0]);
       
   104 			quit(1);
       
   105 		}
       
   106 	}
       
   107 
       
   108 	/* Set 640x480 video mode */
       
   109 	if ( SDL_SetVideoMode(640, 480, 0, videoflags) == NULL ) {
       
   110 		fprintf(stderr, "Couldn't set 640x480 video mode: %s\n",
       
   111 							SDL_GetError());
       
   112 		quit(2);
       
   113 	}
       
   114 
       
   115 	/* Enable UNICODE translation for keyboard input */
       
   116 	SDL_EnableUNICODE(1);
       
   117 
       
   118 	/* Enable auto repeat for keyboard input */
       
   119 	SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,
       
   120 	                    SDL_DEFAULT_REPEAT_INTERVAL);
       
   121 
       
   122 	/* Watch keystrokes */
       
   123 	done = 0;
       
   124 	while ( !done ) {
       
   125 		/* Check for events */
       
   126 		SDL_WaitEvent(&event);
       
   127 		switch (event.type) {
       
   128 			case SDL_KEYDOWN:
       
   129 				PrintKey(&event.key.keysym, 1);
       
   130 				break;
       
   131 			case SDL_KEYUP:
       
   132 				PrintKey(&event.key.keysym, 0);
       
   133 				break;
       
   134 			case SDL_MOUSEBUTTONDOWN:
       
   135 				/* Any button press quits the app... */
       
   136 			case SDL_QUIT:
       
   137 				done = 1;
       
   138 				break;
       
   139 			default:
       
   140 				break;
       
   141 		}
       
   142 	}
       
   143 
       
   144 	SDL_Quit();
       
   145 	return(0);
       
   146 }