view test/checkkeys.c @ 1710:db78e088b6ce SDL-1.3

------- Comment #5 From Marc Peter 2006-06-25 18:03 [reply] ------- Created an attachment (id=142) [edit] updated makefiles for 1.2.11 release The new Watcom-Win32.zip - includes the new testcursor test, and - doesn't link to dxguid.lib anymore (by defining INITGUID for SDL_dx5events.c), to fix issue with stack calling convention (-6s can now be used instead of -6r in CFLAGS). ------- Comment #6 From Marc Peter 2006-06-25 18:12 [reply] ------- Created an attachment (id=143) [edit] updated README.Watcom for 1.2.11 - lists new testcursor test - mentions possibility to build with -6s (stack calling convention) instead of -6r (register calling convention)
author Sam Lantinga <slouken@libsdl.org>
date Mon, 26 Jun 2006 01:35:02 +0000
parents 4da1ee79c9af
children
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:  %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);
}