Mercurial > sdl-ios-xcode
view test/checkkeys.c @ 2295:dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
author | Bob Pendleton <bob@pendleton.com> |
---|---|
date | Tue, 08 Jan 2008 00:10:46 +0000 |
parents | c121d94672cb |
children | c97ad1abe05b |
line wrap: on
line source
/* 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: physical 0x%08X = %s, layout 0x%08X = %s ", pressed ? "pressed " : "released", sym->sym, SDL_GetKeyName(sym->sym), SDL_GetLayoutKey(sym->sym), SDL_GetKeyName(SDL_GetLayoutKey(sym->sym))); } else { printf("Unknown Key (scancode = 0x%08X) %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); }