module "/pliant/language/context.pli"

constant sdl_library "libSDL.so"

public
 # Keysym structure
 #   - The scancode is hardware dependent, and should not be used by general
 #     applications.  If no hardware scancode is available, it will be 0.
 #
 #   - The 'unicode' translated character is only available when character
 #     translation is enabled by the SDL_EnableUNICODE() API.  If non-zero,
 #     this is a 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 {
 #              An international character..
 #      }


 type SDL_keysym
  packed
  field uInt8 scancode #hardware specifict scancode
  field (Array Byte 3) padding0
  field Int sym        #SDL virtual keysym (see SDL_keysym.pli)
  field Int mod        #Current key modifiers
  field uInt16 unicode #Tranlated unicode character
  field (Array Byte 2) padding1

 #This is the mask which refers to all hotkey bindings
 gvar Int SDL_ALL_HOTKEYS := 0FFFFFFFFh

 # Function prototypes 

 # Enable/Disable UNICODE translation of keyboard input.
 # This translation has some overhead, so translation defaults off.
 # If 'enable' is 1, translation is enabled.
 # If 'enable' is 0, translation is disabled.
 # If 'enable' is -1, the translation state is not changed.
 # It returns the previous state of keyboard translation.

 function SDL_EnableUNICODE enable -> z
  arg Int enable z
  external sdl_library "SDL_EnableUNICODE"

 # Enable/Disable keyboard repeat.  Keyboard repeat defaults to off.
 # 'delay' is the initial delay in ms between the time when a key is
 # pressed, and keyboard repeat begins.
 # 'interval' is the time in ms between keyboard repeat events.

 gvar Int SDL_DEFAULT_REPEAT_DELAY := 500
 gvar Int SDL_DEFAULT_REPEAT_INTERVAL := 30

 #If 'delay' is set to 0, keyboard repeat is disabled.
 function SDL_EnableKeyRepeat delay interval -> z
  arg Int delay interval z
  external sdl_library "SDL_EnableKeyRepeat"

 # Get a snapshot of the current state of the keyboard.
 # Returns an array of keystates, indexed by the SDLK_* syms.
 # Used:
 #      Uint8 *keystate = SDL_GetKeyState(NULL);
 #      if ( keystate[SDLK_RETURN] ) ... <RETURN> is pressed.

 function SDL_GetKeyState numkeys -> u
  arg Int numkeys
  arg uInt u
  external sdl_library "SDL_GetKeyState"


 # Get the current key modifier state
 function SDL_GetModState -> modstate
  arg uInt modstate
  external sdl_library "SDL_GetModState"

 # Set the current key modifier state
 # This does not change the keyboard state, only the key modifier flags.

 function SDL_SetModState modstate
  arg uInt modstate
  external sdl_library "SDL_SetModState"


 # Get the name of an SDL virtual keysym
 function SDL_GetKeyName key -> name
  arg Int key
  arg Str name
  external sdl_library "SDL_GetKeyName"