---
name: "key"
section: "3alleg"
platform: "linux"
package: "liballegro-doc"
version: "2:4.2.2-2.2"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/key/3alleg"
---

# key(3alleg)

Array of flags indicating key state. Allegro game programming library.

## NAME

key - Array of flags indicating key state. Allegro game programming library.

## SYNOPSIS

**#include \<allegro.h\>**

**extern volatile char key\[KEY\_MAX\];**

## DESCRIPTION

Array of flags indicating the state of each key, ordered by scancode.  Wherever possible these values will be updated asynchronously, but if  keyboard\_needs\_poll() returns TRUE, you must manually call  poll\_keyboard() to update them with the current input state. The  scancodes are defined in allegro/keyboard.h as a series of KEY\_\* constants (and are also listed below). For example, you could write:

```
   if (key[KEY_SPACE])
      printf("Space is pressed\n");
```

Note that the array is supposed to represent which keys are physically held down and which keys are not, so it is semantically read-only.

These are the keyboard scancodes:

```
   KEY_A ... KEY_Z,
   KEY_0 ... KEY_9,
   KEY_0_PAD ... KEY_9_PAD,
   KEY_F1 ... KEY_F12,
   KEY_ESC, KEY_TILDE, KEY_MINUS, KEY_EQUALS,
   KEY_BACKSPACE, KEY_TAB, KEY_OPENBRACE, KEY_CLOSEBRACE,
   KEY_ENTER, KEY_COLON, KEY_QUOTE, KEY_BACKSLASH,
   KEY_BACKSLASH2, KEY_COMMA, KEY_STOP, KEY_SLASH,
   KEY_SPACE,
   KEY_INSERT, KEY_DEL, KEY_HOME, KEY_END, KEY_PGUP,
   KEY_PGDN, KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN,
   KEY_SLASH_PAD, KEY_ASTERISK, KEY_MINUS_PAD,
   KEY_PLUS_PAD, KEY_DEL_PAD, KEY_ENTER_PAD,
   KEY_PRTSCR, KEY_PAUSE,
   KEY_ABNT_C1, KEY_YEN, KEY_KANA, KEY_CONVERT, KEY_NOCONVERT,
   KEY_AT, KEY_CIRCUMFLEX, KEY_COLON2, KEY_KANJI,
   KEY_LSHIFT, KEY_RSHIFT,
   KEY_LCONTROL, KEY_RCONTROL,
   KEY_ALT, KEY_ALTGR,
   KEY_LWIN, KEY_RWIN, KEY_MENU,
   KEY_SCRLOCK, KEY_NUMLOCK, KEY_CAPSLOCK
   KEY_EQUALS_PAD, KEY_BACKQUOTE, KEY_SEMICOLON, KEY_COMMAND
```

Finally, you may notice an \`odd' behaviour of the KEY\_PAUSE key. This key only generates an interrupt when it is pressed, not when it is released. For this reason, Allegro pretends the pause key is a \`state' key, which is the only way to make it usable.

## SEE ALSO

[**install\_keyboard**(3alleg)](/install_keyboard/3alleg.md), [**poll\_keyboard**(3alleg)](/poll_keyboard/3alleg.md), [**key\_shifts**(3alleg)](/key_shifts/3alleg.md)
