---
name: "SDL_keysym"
section: "3"
platform: "linux"
package: "libsdl1.2-dev"
version: "1.2.15+dfsg2-8"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/SDL_keysym"
---

# SDL\_keysym(3)

Keysym structure

## NAME

SDL\_keysym - Keysym structure

## STRUCTURE DEFINITION

```
typedef struct{
  Uint8 scancode;
  SDLKey sym;
  SDLMod mod;
  Uint16 unicode;
} SDL_keysym;
```

## STRUCTURE DATA

- **scancode**

  Hardware specific scancode

- **sym**

  SDL virtual keysym

- **mod**

  Current key modifiers

- **unicode**

  Translated character

## DESCRIPTION

The **SDL\_keysym** structure is used by reporting key presses and releases since it is a part of the **SDL\_KeyboardEvent**.

The **scancode** field should generally be left alone, it is the hardware dependent scancode returned by the keyboard. The **sym** field is extremely useful. It is the SDL-defined value of the key (see *SDL Key Syms*. This field is very useful when you are checking for certain key presses, like so:

```
.
.
while(SDL_PollEvent(&event)){
  switch(event.type){
    case SDL_KEYDOWN:
      if(event.key.keysym.sym==SDLK_LEFT)
        move_left();
      break;
    .
    .
    .
  }
}
.
.
```

 **mod** stores the current state of the keyboard modifiers as explained in **SDL\_GetModState**. The **unicode** is only used when UNICODE translation is enabled with **SDL\_EnableUNICODE**. If **unicode** is non-zero then this a the UNICODE character corresponding to the keypress. If the high 9 bits of the character are 0, then this maps to the equivalent ASCII character:

```
char ch;
if ( (keysym.unicode & 0xFF80) == 0 ) {
  ch = keysym.unicode & 0x7F;
}
else {
  printf("An International Character.
");
}
```

 UNICODE translation does have a slight overhead so don't enable it unless its needed.

## SEE ALSO

**SDLKey**
