author | Sam Lantinga <slouken@libsdl.org> |
Mon, 16 Sep 2002 06:21:23 +0000 | |
changeset 493 | 806fcbde0af3 |
parent 473 | 30466f501b77 |
child 1151 | be9c9c8f6d53 |
permissions | -rw-r--r-- |
0 | 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 |
static void print_modifiers(void) |
|
14 |
{ |
|
15 |
int mod; |
|
16 |
printf(" modifiers:"); |
|
17 |
mod = SDL_GetModState(); |
|
18 |
if(!mod) { |
|
19 |
printf(" (none)"); |
|
20 |
return; |
|
21 |
} |
|
22 |
if(mod & KMOD_LSHIFT) |
|
23 |
printf(" LSHIFT"); |
|
24 |
if(mod & KMOD_RSHIFT) |
|
25 |
printf(" RSHIFT"); |
|
26 |
if(mod & KMOD_LCTRL) |
|
27 |
printf(" LCTRL"); |
|
28 |
if(mod & KMOD_RCTRL) |
|
29 |
printf(" RCTRL"); |
|
30 |
if(mod & KMOD_LALT) |
|
31 |
printf(" LALT"); |
|
32 |
if(mod & KMOD_RALT) |
|
33 |
printf(" RALT"); |
|
34 |
if(mod & KMOD_LMETA) |
|
35 |
printf(" LMETA"); |
|
36 |
if(mod & KMOD_RMETA) |
|
37 |
printf(" RMETA"); |
|
38 |
if(mod & KMOD_NUM) |
|
39 |
printf(" NUM"); |
|
40 |
if(mod & KMOD_CAPS) |
|
41 |
printf(" CAPS"); |
|
42 |
if(mod & KMOD_MODE) |
|
43 |
printf(" MODE"); |
|
44 |
} |
|
45 |
||
46 |
static void PrintKey(SDL_keysym *sym, int pressed) |
|
47 |
{ |
|
48 |
/* Print the keycode, name and state */ |
|
49 |
if ( sym->sym ) { |
|
50 |
printf("Key %s: %d-%s ", pressed ? "pressed" : "released", |
|
51 |
sym->sym, SDL_GetKeyName(sym->sym)); |
|
52 |
} else { |
|
53 |
printf("Unknown Key (scancode = %d) %s ", sym->scancode, |
|
54 |
pressed ? "pressed" : "released"); |
|
55 |
} |
|
56 |
||
57 |
/* Print the translated character, if one exists */ |
|
58 |
if ( sym->unicode ) { |
|
59 |
/* Is it a control-character? */ |
|
60 |
if ( sym->unicode < ' ' ) { |
|
61 |
printf(" (^%c)", sym->unicode+'@'); |
|
62 |
} else { |
|
63 |
#ifdef UNICODE |
|
64 |
printf(" (%c)", sym->unicode); |
|
65 |
#else |
|
66 |
/* This is a Latin-1 program, so only show 8-bits */ |
|
67 |
if ( !(sym->unicode & 0xFF00) ) |
|
68 |
printf(" (%c)", sym->unicode); |
|
69 |
#endif |
|
70 |
} |
|
71 |
} |
|
72 |
print_modifiers(); |
|
73 |
printf("\n"); |
|
74 |
} |
|
75 |
||
76 |
int main(int argc, char *argv[]) |
|
77 |
{ |
|
78 |
SDL_Event event; |
|
79 |
int done; |
|
473 | 80 |
Uint32 videoflags; |
0 | 81 |
|
82 |
/* Initialize SDL */ |
|
83 |
if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { |
|
84 |
fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); |
|
85 |
exit(1); |
|
86 |
} |
|
87 |
atexit(SDL_Quit); |
|
88 |
||
473 | 89 |
videoflags = SDL_SWSURFACE; |
493
806fcbde0af3
Fixed a crash bug in checkkeys.c (thanks John!)
Sam Lantinga <slouken@libsdl.org>
parents:
473
diff
changeset
|
90 |
while( argc > 1 ) { |
806fcbde0af3
Fixed a crash bug in checkkeys.c (thanks John!)
Sam Lantinga <slouken@libsdl.org>
parents:
473
diff
changeset
|
91 |
--argc; |
806fcbde0af3
Fixed a crash bug in checkkeys.c (thanks John!)
Sam Lantinga <slouken@libsdl.org>
parents:
473
diff
changeset
|
92 |
if ( argv[argc] && !strcmp(argv[argc], "-fullscreen") ) { |
806fcbde0af3
Fixed a crash bug in checkkeys.c (thanks John!)
Sam Lantinga <slouken@libsdl.org>
parents:
473
diff
changeset
|
93 |
videoflags |= SDL_FULLSCREEN; |
806fcbde0af3
Fixed a crash bug in checkkeys.c (thanks John!)
Sam Lantinga <slouken@libsdl.org>
parents:
473
diff
changeset
|
94 |
} else { |
806fcbde0af3
Fixed a crash bug in checkkeys.c (thanks John!)
Sam Lantinga <slouken@libsdl.org>
parents:
473
diff
changeset
|
95 |
fprintf(stderr, "Usage: %s [-fullscreen]\n", argv[0]); |
806fcbde0af3
Fixed a crash bug in checkkeys.c (thanks John!)
Sam Lantinga <slouken@libsdl.org>
parents:
473
diff
changeset
|
96 |
exit(1); |
806fcbde0af3
Fixed a crash bug in checkkeys.c (thanks John!)
Sam Lantinga <slouken@libsdl.org>
parents:
473
diff
changeset
|
97 |
} |
473 | 98 |
} |
99 |
||
0 | 100 |
/* Set 640x480 video mode */ |
473 | 101 |
if ( SDL_SetVideoMode(640, 480, 0, videoflags) == NULL ) { |
0 | 102 |
fprintf(stderr, "Couldn't set 640x480 video mode: %s\n", |
103 |
SDL_GetError()); |
|
104 |
exit(2); |
|
105 |
} |
|
106 |
||
107 |
/* Enable UNICODE translation for keyboard input */ |
|
108 |
SDL_EnableUNICODE(1); |
|
109 |
||
110 |
/* Enable auto repeat for keyboard input */ |
|
111 |
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, |
|
112 |
SDL_DEFAULT_REPEAT_INTERVAL); |
|
113 |
||
114 |
/* Watch keystrokes */ |
|
115 |
done = 0; |
|
116 |
while ( !done ) { |
|
117 |
/* Check for events */ |
|
118 |
SDL_WaitEvent(&event); |
|
119 |
switch (event.type) { |
|
120 |
case SDL_KEYDOWN: |
|
121 |
PrintKey(&event.key.keysym, 1); |
|
122 |
break; |
|
123 |
case SDL_KEYUP: |
|
124 |
PrintKey(&event.key.keysym, 0); |
|
125 |
break; |
|
126 |
case SDL_MOUSEBUTTONDOWN: |
|
127 |
/* Any button press quits the app... */ |
|
128 |
case SDL_QUIT: |
|
129 |
done = 1; |
|
130 |
break; |
|
131 |
default: |
|
132 |
break; |
|
133 |
} |
|
134 |
} |
|
135 |
return(0); |
|
136 |
} |