Annotation of hatari/tests/keymap/checkkeys.c, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.